📅  最后修改于: 2023-12-03 14:49:33.103000             🧑  作者: Mango
传单圈子获取边界是一个常见的问题,特别是在地图上标注区域边界的时候。在Javascript中,我们可以使用一些算法来实现这个功能。
Convex Hull算法是一个用于在平面上寻找包围点集最小凸多边形的算法。该算法可以用于找到点集的边界。
点集凸包算法是一个用于找到点集的边界的算法,也可以用于计算Convex Hull。
function getConvexHull(points) {
var hull = [];
var n = points.length;
points.sort(function(a, b) {
return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0];
});
for (var i = 0; i < 2 * n; i++) {
var j = i < n ? i : 2 * n - 1 - i;
while (hull.length >= 2 && removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j]))
hull.pop();
hull.push(points[j]);
}
hull.pop();
return hull;
}
function removeMiddle(a, b, c) {
var crossProduct = (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
var dotProduct = (b[0] - a[0]) * (c[0] - b[0]) + (b[1] - a[1]) * (c[1] - b[1]);
return crossProduct < 0 || crossProduct == 0 && dotProduct <= 0;
}
function getConvexHull(points) {
var hull = [];
var n = points.length;
points.sort(function(a, b) {
return a[0] == b[0] ? a[1] - b[1] : a[0] - b[0];
});
for (var i = 0; i < 2 * n; i++) {
var j = i < n ? i : 2 * n - 1 - i;
while (hull.length >= 2 && removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j]))
hull.pop();
hull.push(points[j]);
}
hull.pop();
return hull;
}
function removeMiddle(a, b, c) {
var crossProduct = (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
var dotProduct = (b[0] - a[0]) * (c[0] - b[0]) + (b[1] - a[1]) * (c[1] - b[1]);
return crossProduct < 0 || crossProduct == 0 && dotProduct <= 0;
}
在Javascript中,我们可以使用Convex Hull算法或点集凸包算法来实现传单圈子获取边界的功能;其中Convex Hull算法可以用于计算点集的边界。