检测数组中作为复杂多边形顶点的一组点是否按顺时针或逆时针顺序定义?

2024-02-21

编辑:我更新了program http://colekito.com/ProgrammingProjects/Science%20Fair/有了答案,效果很好!

我正在做一个program http://colekito.com/ProgrammingProjects/Science%20Fair/(随意尝试一下)它允许用户绘制多边形,然后对其进行三角测量。他们可以单击添加顶点并按 Enter 进行三角测量。无论如何,只要我告诉它这些点是按顺时针还是逆时针方式绘制的,该算法就可以正常工作(现在我将其设置为仅适用于顺时针多边形)。我几天来一直试图解决这个问题,但不知道如何确定这些点是顺时针还是逆时针。尝试使用前面提到的程序绘制形状以获得更好的想法,您可以比我尝试解释的更好地体验我正在谈论的内容。

以下是点的定义方式:

function Point(x, y) {
    this.x = x;
    this.y = y;
}

var vertices = [];

// Called on click
function addPoint(mouseX, mouseY) {
    vertices.push(new Point(mouseX, mouseY));
}

这是顺时针多边形的图像:

这是逆时针多边形的图像:

如果您能帮我弄清楚如何确定点的“顺时针方向”,我将非常感激!


使用以下公式计算多边形面积鞋带公式 http://en.wikipedia.org/wiki/Shoelace_formula,但没有绝对值符号。如果结果为正,则点逆时针排序,如果结果为负,则顺时针排序。

function polygonArea() { 
    var area = 0;
    for (var i = 0; i < vertices.length; i++) {
        j = (i + 1) % vertices.length;
        area += vertices[i].x * vertices[j].y;
        area -= vertices[j].x * vertices[i].y;
    }
    return area / 2;
}
var clockwise = polygonArea() > 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测数组中作为复杂多边形顶点的一组点是否按顺时针或逆时针顺序定义? 的相关文章

随机推荐