如何获得旋转矩形的大小

时间:2010-07-12 18:36:54

标签: geometry

  

可能重复:
  Calculate Bounding box coordinates from a rotated rectangle, Picture inside.

我有一个旋转的矩形, 那么我如何计算2D坐标中旋转矩形的轴对齐边界框的大小?

附加图片 http://img88.imageshack.us/img88/503/rotp.png

我知道x,y,o(角度) 但我如何得到一个,b

谢谢

7 个答案:

答案 0 :(得分:32)

a = abs(x * sin(o)) + abs(y * cos(o))
b = abs(x * cos(o)) + abs(y * sin(o))

答案 1 :(得分:5)

要构造轴对齐的边界框,必须找到旋转框的极值点。即,

给定矩形'P',由点P1 =(0,0)给出,P2 =(x,0),P3(x,y),P4(0,y),旋转'R'度;找到minX,maxX,minY,maxY,这样框[(minX,minY),(maxX,maxY)]完全限制旋转的'P'。

                          +-------P3'----+maxY
                          |     /    \   |
  P4------P3              |   /        \ |
   |      |    rotate     | /            P2'
   |      | => by 'R' =>  P4'           /|
   |      |    degrees    | \         /  |
  P1------P2              |   \     /    |
                          |     \ /      |
                          +-----P1'------+minY
                         minX           maxX

边界框的值是旋转点P1'... P4'的分量的最小值/最大值;因此,

minX=min(P1'[x],P2'[x],P3'[x],P4'[x])
maxX=max(P1'[x],P2'[x],P3'[x],P4'[x])
minY=min(P1'[y],P2'[y],P3'[y],P4'[y])
maxY=max(P1'[y],P2'[y],P3'[y],P4'[y])

有关2D旋转的讨论,请参阅http://en.wikipedia.org/wiki/Transformation_matrix#Rotation

答案 2 :(得分:1)

嗯,你没有提供很多细节。我假设您知道矩形的高度和宽度将为您提供无论旋转的区域。如果您只有x,y数据点,则使用sqrt((x1-x1)^2 + (y1-y2)^2)。获得一方的长度。

你澄清了你的问题所以,如果你有一个矩形,你知道左上角的角度是从顶部旋转,所以左侧看起来像这样。
/
/
a =正弦(alpha)*宽度
b =余弦(alpha)*宽度
c =正弦(alpha)*高度
d =余弦(alpha)*高度

width = a + d
height = b + c
确保你得到正确的角度,这里有点难以澄清。如果你得到另一个角度,那么它将出现在 width = b + c
height = a + d

答案 3 :(得分:0)

对于旋转矩形的轴对齐框,可以找到4个旋转坐标中每个的最小值和最大值。 minX和minY变为1角,maxX和maxY变为另一角。

答案 4 :(得分:-1)

计算原始矩形的面积。区域在旋转时不会改变。

答案 5 :(得分:-1)

使用[苍鹭的三角形区域计算器] s = (a + b + c) / 2或三角形周长的1/2(

A = SquareRoot(s * (s - a) * (s - b) * (s - c))

哪里

a=SquareRoot((X1-X2)^2+(Y1-Y2)^2)  [Side 1 Length]
b=SquareRoot((X1-X3)^2+(Y1-Y3)^2)  [Side 2 Length]
c=SquareRoot((X2-X3)^2+(Y2-Y3)^2)  [Side 3 Length]

X1,Y1,X2,Y2,X3,Y3是任意三点(角落)的协调

RectangleArea=2*A

或没有[苍鹭的公式三角区域计算器]直接,点的顺序在这里很重要。

P1----P2
|     |
P3----P4

 a=SquareRoot((X1-X2)^2+(Y1-Y2)^2)  [Side 1 Length]
 b=SquareRoot((X1-X3)^2+(Y1-Y3)^2)  [Side 2 Length]
 RectangleArea=a*b

答案 6 :(得分:-3)

这有点复杂,但对于一个矩形Area = b * h = length * width