【问题标题】:Calculate Width and Height from 4 points of a polygon从多边形的 4 个点计算宽度和高度
【发布时间】:2011-11-20 11:02:08
【问题描述】:

我有四个点形成一个矩形,我允许用户移动任何点并将矩形旋转一个角度(每个点围绕中心点旋转)。它保持近乎完美的矩形形状(只要 PointF 精度允许)。这是我从四个点绘制的“矩形”示例:

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

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

【问题讨论】:

  • 这实际上更像是一个几何问题。您可以取前三个点并计算边的长度。如果您想稍微提高精度,可以将长度与其他 2 个边长取平均值。有关公式,请参见此处:en.wikipedia.org/wiki/Pythagorean_theorem
  • 你能准确定义旋转矩形的“宽度”是什么意思吗?
  • 和不旋转的矩形一样。如,如果你取一个宽度为 100 的四个点的 Rectangle,然后旋转它,宽度不应该改变。无论矩形的旋转如何,您都应该能够计算出 100 的值。

标签: c# .net gdi point


【解决方案1】:

如果用“宽度”和“高度”表示边长,并且在列表或数组中有 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));

【讨论】:

    【解决方案2】:

    只需使用算法计算两点之间的距离。 如果你有 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)

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

    【讨论】:

      【解决方案3】:

      假设最上面的角是 A。然后将其他边逆时针命名为 ABCD

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

      计算两点之间距离的公式,比如 A(x1,y1) 和 B(x2,y2):

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

      其中 d 是距离。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-12
        相关资源
        最近更新 更多