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

Con*_*uhl 16 javascript arrays math geometry 2d

编辑:我用答案更新了程序,效果很好!

我正在制作一个程序(随意尝试),让用户绘制多边形,然后进行三角测量.他们可以单击添加顶点并按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));
}
Run Code Online (Sandbox Code Playgroud)

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

顺时针多边形

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

逆时针多边形

如果你能帮我弄清楚如何确定积分的"顺时针方向",我将非常感激!

kod*_*kod 24

使用鞋带公式计算多边形区域,但没有绝对值符号.如果结果为正,则点按逆时针方向排序,如果为负 - 顺时针方向.

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;
Run Code Online (Sandbox Code Playgroud)

  • 因为我们只关心这个标志所以没有必要除以2; 并不是说它有很大的不同. (2认同)