判断一个点是否在闭合曲线内

更新于 阅读 48
判断一个点是否在闭合曲线内

以前在做医疗靶区勾画时用到过这个算法,现在总结一下,介绍引射线法。

1、原理

从目标点引一条射线,判断这条线与曲线的交点个数为奇数还是偶数,为奇数表示点在曲线内,偶数表示点在曲线外。

js代码如下:

function pointInPolygon(point, lines) { var inside = false; for (var i=0; i<lines.length-1; i++) { var slope = (lines[i+1].y - lines[i].y)/(lines[i+1].x - lines[i].x); var xBetween = (lines[i].x < point.x && point.x <lines[i+1].x) || (lines[i+1].x < point.x && point.x <lines[i].x); var yAbove = point.y < (slope * (point.x - lines[i].x) + lines[i].y); if (xBetween && yAbove) { inside = !inside; } } return inside; }

上面是向Y轴正方向引射线,判断射线与曲线的交点个数。


下面是github上的插件https://github.com/substack/point-in-polygon

ps: 如有意见或建议,欢迎指出