判断一个点是否在闭合曲线内
更新于 阅读 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: 如有意见或建议,欢迎指出