从多边形的4个点计算宽度和高度

时间:2011-09-19 17:41:36

标签: c# .net gdi point

我有四个点形成一个矩形,我允许用户移动任何点并将矩形旋转一个角度(围绕中心点旋转每个点)。它保持近乎完美的矩形形状(就PointF精度而言)。这是我从四个方面得出的“矩形”的一个例子:

enter image description here

但是,我需要能够获得点之间的宽度和高度。当矩形没有旋转时这很容易,但是一旦我旋转它,我的数学就会返回红色轮廓所示的宽度和高度:

enter image description here

假设我知道点的顺序(例如从左上角顺时针方向),我该如何检索它们所代表的矩形的宽度和高度?

3 个答案:

答案 0 :(得分:6)

如果用“width”和“height”表示边长,你在列表或数组中有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));

答案 1 :(得分: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)

选择一个作为你的宽度,一个作为你的身高。

答案 2 :(得分:1)

假设最顶角为A.然后将其他边缘逆时针命名为ABCD

矩形的宽度= A和B之间的距离 矩形的高度= B和C之间的距离

找到两点之间距离的公式,例如A(x1,y1)和B(x2,y2)是:

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

其中d是距离。