我有四个点组成一个矩形,并允许用户移动任何一个点以及旋转矩形(旋转每个点围绕中心点)。它保持近乎完美的矩形形状(PointF精度范围内)。这是我的“矩形”的示例,由四个点绘制:
然而,我需要能够获取点之间的宽度和高度。当矩形未旋转时很容易,但一旦旋转,我的计算返回红色轮廓所示的宽度和高度:
假设我知道点的顺序(例如从左上角按顺时针方向),如何检索它们所代表的矩形的宽度和高度?
![enter image description here](https://istack.dev59.com/25RLw.webp)
![enter image description here](https://istack.dev59.com/yveo8.webp)
如果您所说的“宽度”和“高度”只是指边长,并且您已将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));
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)
选择其中一个作为宽度,另一个作为高度。假设左上角为A,则按逆时针方向命名其他边为ABCD
矩形的宽度= A和B之间的距离
矩形的高度= B和C之间的距离
计算两点之间距离的公式,例如A(x1,y1)和B(x2,y2):
d = sqrt( (x2 - x1)^2 + ( y2 - y1)^2 )
其中 d 代表距离。