如何获取旋转矩形的大小

13

3
旋转后,这个区域和旋转前是相同的吗? - ire_and_curses
1
你是指“它所占据的区域”,比如获取角落的坐标之类的吗? - integer
@integer 是的,如何计算已知矩形的宽度/高度/角度。 - Northern
下次请不要更改原始问题,而是尝试创建新的问题。这样会让读者感到困惑。 - Waleed A.K.
6
该图像已经不存在。 - user47589
显示剩余3条评论
7个回答

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

1
这对我不起作用... 给定:O=75,Y=39,X=105,结果是A=-4.76877,B=81.66039,显然是不正确的! - Campbeln
它是以弧度为单位的...所以将角度转换为弧度。(谷歌计算器可以做到这一点) - Souleiman
3
抱歉,即使在弧度制下也不正确。我现在已经添加了abs()函数到你的答案中 - 在这个变化后它应该是正确的了。(原始版本为a = x * sin(o) + y * cos(o)b = x * cos(o) + y * sin(o),这会导致Campbeln上述描述的错误计算。) - Jpsy
7
由于图片丢失了,x是原始宽度,y是原始高度,a是新边界框的高度,b是新边界框的宽度。有了这些定义,这个公式对我来说可以正常工作。 - ulatekh
2
在所有计算旋转矩形边界框的答案中,这个给了我正确的结果。顺便提一下:度数 = o * (Math.PI/180)。 - slappy-x
显示剩余2条评论

10

构造轴对齐包围框需要找到旋转后的矩形的极端点,即给定由点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


2
很抱歉,您没有提供足够的细节。我假设您知道矩形的高度和宽度将给您面积,无论旋转角度如何。如果您只有x、y数据点,则使用sqrt((x1-x1)^2 + (y1-y2)^2)来获取边长。
您澄清了问题,所以如果您有一个矩形,并且您知道从左上角旋转的角度使左侧看起来像这样。
  /
/
a = 正弦(alpha)*宽度
b = 余弦(alpha)*宽度
c = 正弦(alpha)*高度
d = 余弦(alpha)*高度
宽度 = a + d
高度 = b + c
请确保您得到正确的角度,在这里澄清它有点困难。如果您获得另一个角度,则结果将为
宽度 = b + c
高度 = a + d

我想要使用这个公式,谢谢。 - Northern
根据您附上的图片,您不应该使用这个公式。您应该使用面积= x * y。 - mbeckish
如果你想要a和b,那么mbeckish是正确的,你需要用我的第二个公式而不是第一个。 - qw3n
不应该是"x1-x2"吗?我想编辑它,但需要超过5个字符。 - Nande

0

对于旋转矩形的轴对齐框,您需要找到每个旋转坐标的最小值和最大值。其中minX和minY成为一个角,maxX和maxY成为另一个角。


-1
使用[Heron公式三角形面积计算器] 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

-3

计算原矩形的面积。在旋转下,面积不会改变。


-4

这有点复杂,但对于一个矩形来说,面积 = 底 * 高 = 长 * 宽


2
旋转的矩形不是一个矩形。 - philshem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接