2011-09-19 31 views
4

我具有形成矩形的四個點的高度,並且我允許用戶移動的任何點和旋轉的角度的矩形(其旋轉的每個點繞中心點) 。它保持接近完美的矩形形狀(只要PointF精度允許)。下面是從四點畫出我的「矩形」的一個例子:計算寬度和從4點的多邊形

enter image description here

不過,我需要能夠得到點之間的寬度和高度。這是很容易當矩形不旋轉,但一旦我轉動它我的數學返回由紅色輪廓此處顯示的寬度和高度:

enter image description here

假設我知道點的順序(從頂部順時針例如左),我如何檢索它們代表的矩形的寬度和高度?

+0

這真的是越來越幾何問題。你可以取前三個點並計算邊的長度。如果您想要稍微提高精度,則可以使用其他2個邊長度來平均長度。對於公式,請參見:http://en.wikipedia.org/wiki/Pythagorean_theorem –

+4

您能準確地定義您的旋轉矩形的「寬度」是什麼意思嗎? –

+0

它與非旋轉矩形相同。如上所述,如果您採用寬度爲100的四個點的矩形,然後旋轉它,則寬度不應改變。無論矩形的旋轉如何,您都應該能夠計算出100的值。 –

回答

6

如果「寬度」和「高度」,你剛纔的意思是邊長,你有你的4層PointF結構列表或數組,你可以這樣做:

double width = Math.Sqrt(Math.Pow(point[1].X - point[0].X, 2) + Math.Pow(point[1].Y - point[0].Y, 2)); 
double height = Math.Sqrt(Math.Pow(point[2].X - point[1].X, 2) + Math.Pow(point[2].Y - point[1].Y, 2)); 
+0

謝謝,這個作品很棒。 –

+0

-1爲沒有教學的答案。 – Shibumi

5

只需使用算法兩點之間的距離。 如果你有A,B,C,D點,你會得到兩個距離。

sqrt((Bx-Ax)^2 + (By-Ay)^2)將等於sqrt((Dx-Cx)^2 + (Dy-Cy)^2)

sqrt((Cx-Bx)^2 + (Cy-By)^2)將等於sqrt((Ax-Dx)^2 + (Ay-Dy)^2)

選擇一個是你的寬度和一個是你的高度。

1

比方說,最頂部角是A.然後命名其它邊緣逆時針方向作爲ABCD B和C之間的矩形之間的

寬度=距離和B
高度矩形=距離

式找到兩個點之間的距離表示A(x1,y1)和B(x2,y2)是:

d = sqrt((x2 - x1)^2 + (y2 - y1)^2) 

其中d是距離。