且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

检查点是否在多边形内

更新时间:2023-11-28 21:59:16

有一个在Github上的项目,代码为: https://github.com/substack/point-in-polygon(MIT许可证):

There is a project on Github with code: https://github.com/substack/point-in-polygon (MIT license):

function inside(point, vs) {
    // ray-casting algorithm based on
    // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

    var x = point[0], y = point[1];

    var inside = false;
    for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
        var xi = vs[i][0], yi = vs[i][1];
        var xj = vs[j][0], yj = vs[j][1];

        var intersect = ((yi > y) != (yj > y))
            && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
        if (intersect) inside = !inside;
    }

    return inside;
};

用法:

// array of coordinates of each vertex of the polygon
var polygon = [ [ 1, 1 ], [ 1, 2 ], [ 2, 2 ], [ 2, 1 ] ];
inside([ 1.5, 1.5 ], polygon); // true

测试函数在这里: https://github.com/substack/point-in-polygon/blob/master/index.js

注意:当点是多边形的一角或边缘时,此代码无法可靠地工作。这里有一个改进的版本: https://github.com/mikolalysenko/robust-point-多边形

Note: This code doesn't work reliably when the point is a corner of the polygon or on an edge. There is an improved version here: https://github.com/mikolalysenko/robust-point-in-polygon