如何获得从P1到P1'旋转后的边界矩形?

问题描述:

请下面的图片如下:如何获得从P1到P1'旋转后的边界矩形?

Illustration Image

我想变换一个矩形的定位点是它的中心从P1到P1' 点。

我想旋转后计算边界矩形。

我使用的解决方案是得到新的4点:P1 => P1'和P2 => P2'等... 但问题是:矩形(我期望得到)更大。 请告诉我一种正确的方法。

谢谢。

+0

我假设你知道如何计算旋转本身?当你知道P1'时,边界框本身就会被微不足道地计算出来。等等 – Alnitak 2011-04-11 09:52:28

+0

@Johnsyweb:问题是,我已经计算出像Andrey的第一个下面的答案,但是我得到的边界矩更大。我不知道为什么?也许,我会更新一个图像的细节。 – vietean 2011-04-11 10:31:38

+0

您是否尝试过使用我的解法计算新顶点? – Henrik 2011-04-12 06:56:35

left = min (Pi'.X for 1<=i<=4) 
bottom = min (Pi'.Y for 1<=i<=4) 
right = max (Pi'.X for 1<=i<=4) 
top = max (Pi'.Y for 1<=i<=4) 
width = top - bottom 
height = right - left 
bounding_rectangle = [left, bottom, width, height] 

更新:

要通过angle弧度旋转点p各地center

v.x = p.x - center.x 
v.y = p.y - center.y 
newp = center.x + cos(angle) * v.x - sin(angle) * v.y, center.y + sin(angle) * v.x + cos(angle) * v.y 

将此应用于每个丕你皮”

+0

你能告诉我我是怎么得到Pi的吗?旋转角度如何?因为我正在编写一个使用鼠标旋转的功能。当我点击conner并将鼠标移动到P'时。我需要绘制一个新的矩形和边界? – vietean 2011-04-11 09:55:17

+1

我已更新回答 – Andrey 2011-04-11 10:11:08

+0

非常感谢您的回答。我对你也是这样做的...... 这真是一个很好的解决方案。也许,问题是从浮点数计算出来的。我会再次检查,然后再次告诉你。 – vietean 2011-04-11 10:37:00

double halfDiagonal = sqrt((center.x - P1.x)*(center.x - P1.x) + (center.y - P1.y)*(center.y - P1.y)); 
double newAngle = rotationAngle + atan2(P1.y - center.y, P1.x - center.x); 
newP1.x = center.x + halfDiagonal * cos(newangle); 

剩余坐标和计算最小/最大值作为re的练习阿德。

+0

非常感谢您的回答。我知道你想告诉我什么。 – vietean 2011-04-11 10:37:48