@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 711 B
JavaScript
export function splitRouteByPoint(t,c){let n=-1,e=0,f=1/0;for(let l=0;l<t.length;l++){const p=t[l];if(p.p0.layer!==c.layer)continue;const s=p.p1.x-p.p0.x,y=p.p1.y-p.p0.y,r=s*s+y*y;if(r===0)continue;const x=((c.x-p.p0.x)*s+(c.y-p.p0.y)*y)/r;if(x<-1e-6||x>1+1e-6)continue;const a=Math.min(1,Math.max(0,x)),m=p.p0.x+a*s,g=p.p0.y+a*y,o=(c.x-m)**2+(c.y-g)**2;o<f&&(f=o,n=l,e=a)}if(n===-1)return{passed:[],remaining:t};if(e<1e-6)return{passed:t.slice(0,n),remaining:t.slice(n)};if(e>1-1e-6)return{passed:t.slice(0,n+1),remaining:t.slice(n+1)};const i=t[n],d={layer:i.p0.layer,x:i.p0.x+e*(i.p1.x-i.p0.x),y:i.p0.y+e*(i.p1.y-i.p0.y)};return{passed:[...t.slice(0,n),{...i,p1:d}],remaining:[{...i,p0:d},...t.slice(n+1)]}}