点在多边形内常用的算法就是使用射线法,作为笔记直接上代码:
/**
* 判断一个点是否在多边形内部
* @param points 多边形坐标集合
* @param testPoint 测试点坐标
* 返回true为真,false为假
* */
function insidePolygon(points, testPoint){
var x = testPoint[0], y = testPoint[1];
var inside = false;
for (var i = 0, j = points.length - 1; i < points.length; j = i++) {
var xi = points[i][0], yi = points[i][1];
var xj = points[j][0], yj = points[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
}
点在圆内
/**
* 判断一个点是否在圆的内部
* @param point 测试点坐标
* @param circle 圆心坐标
* @param r 圆半径
* 返回true为真,false为假
* */
function pointInsideCircle(point, circle, r) {
if (r===0) return false
var dx = circle[0] - point[0]
var dy = circle[1] - point[1]
return dx * dx + dy * dy <= r * r
}
参考链接:1.
openlayer 实现多边形选择 2.
判断点在多边形内部 3.
射线法的详解