任意多边形的宽度

时间:2012-11-05 21:23:53

标签: python computational-geometry

我需要一种方法来表征二维点集的大小,因此我可以确定是将它们渲染为空间中的单个点还是作为代表性多边形,具体取决于视口的比例。我已经有一个算法来计算集合的凸包以产生代表性多边形,但我需要一种方法来表征它的大小。一个明显的衡量标准是凸起整体上的点之间的最大距离,即该集合的直径。但是我对它垂直于其直径的横截面的大小更感兴趣,以确定边界多边形的狭窄程度。有没有一种简单的方法可以做到这一点,给定排序的顶点列表和最远点的索引(理想情况下在Python中)?

或者,是否有一种简单的方法来计算一组点的最小区域边界椭圆的半径?我已经看到了解决这个问题的一些方法,但是我没有什么可以轻易转换为Python的,所以我真的在寻找一些交钥匙的东西。

1 个答案:

答案 0 :(得分:4)

  1. 找到凸包
  2. 找到距离最远的两个点ab
  3. 在这两个
  4. 之间找到方向向量d = (a - b).normalized()
  5. 使用矩阵旋转轴,使此方向矢量水平:

    [ d.x, d.y]
    [-d.y, d.x]
    
  6. 在此新坐标系中查找点的最小和最大y值。区别在于你的“宽度”


  7. 另一个有用的尺寸定义可能是船体上的点与中心之间的平均距离的两倍

    center = sum(convexhullpoints) / len(convexhullpoints)
    size = 2 * sum(abs(p - center) for p in convexhullpoints) / len(convexhullpoints)