点在多边形内常用的算法就是使用射线法,作为笔记直接上代码:
/**
* 判断一个点是否在多边形内部
* @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
}
//或:
document.onclick = function(e) {
var r = 50; //半径
var x1 = 100;
var y1 = 100;
var x2= e.clientX;
var y2= e.clientY;
var distance = Math.abs(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)));
if (distance <= 50)
alert("Yes!");
}