mirror of
https://github.com/multipleof4/lynchmark.git
synced 2026-01-14 16:47:55 +00:00
19 lines
633 B
JavaScript
19 lines
633 B
JavaScript
async function findConvexHull(pts){
|
|
const _=(await import('https://esm.run/lodash@4.17.21')).default;
|
|
let p=_.uniqBy(_.sortBy(pts,['x','y']),q=>[q.x,q.y]);
|
|
if(p.length<=2)return p;
|
|
const cross=(o,a,b)=>(a.x-o.x)*(b.y-o.y)-(a.y-o.y)*(b.x-o.x);
|
|
let lower=[];
|
|
for(let q of p){
|
|
while(lower.length>=2&&cross(lower[lower.length-2],lower[lower.length-1],q)<=0)lower.pop();
|
|
lower.push(q);
|
|
}
|
|
let upper=[];
|
|
let rp=[...p].reverse();
|
|
for(let q of rp){
|
|
while(upper.length>=2&&cross(upper[upper.length-2],upper[upper.length-1],q)<=0)upper.pop();
|
|
upper.push(q);
|
|
}
|
|
return lower.slice(0,-1).concat(upper.slice(0,-1));
|
|
}
|
|
export default findConvexHull; |