可能是重复问题:
计算包围盒坐标,内部有旋转矩形图片。
我有一个旋转的矩形,如何在2D坐标中计算它的轴对齐包围盒大小?
附上图片 http://img88.imageshack.us/img88/503/rotp.png
我知道x、y、o(角度),但如何得到a、b?
谢谢。
可能是重复问题:
计算包围盒坐标,内部有旋转矩形图片。
我有一个旋转的矩形,如何在2D坐标中计算它的轴对齐包围盒大小?
附上图片 http://img88.imageshack.us/img88/503/rotp.png
我知道x、y、o(角度),但如何得到a、b?
谢谢。
a = abs(x * sin(o)) + abs(y * cos(o))
b = abs(x * cos(o)) + abs(y * sin(o))
O=75,Y=39,X=105
,结果是A=-4.76877,B=81.66039
,显然是不正确的! - Campbelna = x * sin(o) + y * cos(o)
和b = x * cos(o) + y * sin(o)
,这会导致Campbeln上述描述的错误计算。) - Jpsyx
是原始宽度,y
是原始高度,a
是新边界框的高度,b
是新边界框的宽度。有了这些定义,这个公式对我来说可以正常工作。 - ulatekh构造轴对齐包围框需要找到旋转后的矩形的极端点,即给定由点P1=(0,0), P2=(x,0), P3(x,y), P4(0,y)定义的矩形'P',绕中心旋转'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
sqrt((x1-x1)^2 + (y1-y2)^2)
来获取边长。对于旋转矩形的轴对齐框,您需要找到每个旋转坐标的最小值和最大值。其中minX和minY成为一个角,maxX和maxY成为另一个角。
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
计算原矩形的面积。在旋转下,面积不会改变。
这有点复杂,但对于一个矩形来说,面积 = 底 * 高 = 长 * 宽
。