math - 如何确定多边形点列表是否按顺时针顺序排列?

标签 math geometry polygon computational-geometry

有一个点列表,如何查找它们是否按顺时针顺序排列?

例如:

point[0] = (5,0)
point[1] = (6,4)
point[2] = (4,5)
point[3] = (1,5)
point[4] = (1,0)

会说它是逆时针方向(或者对某些人来说是逆时针方向)。

最佳答案

对于非凸多边形(例如新月形),某些建议的方法将失败。这是一个适用于非凸多边形的简单方法(它甚至适用于像 8 字形这样的自相交多边形,告诉您它是否大部分是顺时针方向)。

边缘求和,(x2 − x1)(y2 + y1) 。如果结果为正,则曲线为顺时针方向;如果结果为负,则曲线为逆时针方向。 (结果是封闭面积的两倍,采用 +/- 约定。)

point[0] = (5,0)   edge[0]: (6-5)(4+0) =   4
point[1] = (6,4)   edge[1]: (4-6)(5+4) = -18
point[2] = (4,5)   edge[2]: (1-4)(5+5) = -30
point[3] = (1,5)   edge[3]: (1-1)(0+5) =   0
point[4] = (1,0)   edge[4]: (5-1)(0+0) =   0
                                         ---
                                         -44  counter-clockwise

关于math - 如何确定多边形点列表是否按顺时针顺序排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165647/

相关文章:

math - 两个圆盘相交区域的均匀采样

java - 获取正确的多边形以在图像中显示

php - 使用空间多边形(边界)查找点

javascript - Javascript 中的正则表达式查找所有括号结构

python - 3d积分,python,积分集约束

r - 通过非 sf 列内部连接两个 sf 对象

python - 在给定索引和半径的 numpy 数组中绘制一个圆,无需外部库

JAVA : Point in polygon? 如何检查用户的位置是否在 kml 多边形内?

python几何平均数计算

c++ - 一种计算数学常数 e 的有效方法