2011-04-11 77 views
0

請下面的圖片如下:如何獲得從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

回答

2
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

0
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