UNPKG

@maplat/edgeruler

Version:

A small library for dual-constraining a Delaunator triangulation

2 lines (1 loc) 15.7 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const at=11102230246251565e-32,_=134217729,Xt=(3+8*at)*at;function et(I,o,f,l,m){let h,r,v,S,a=o[0],d=l[0],e=0,c=0;d>a==d>-a?(h=a,a=o[++e]):(h=d,d=l[++c]);let g=0;if(e<I&&c<f)for(d>a==d>-a?(r=a+h,v=h-(r-a),a=o[++e]):(r=d+h,v=h-(r-d),d=l[++c]),h=r,v!==0&&(m[g++]=v);e<I&&c<f;)d>a==d>-a?(r=h+a,S=r-h,v=h-(r-S)+(a-S),a=o[++e]):(r=h+d,S=r-h,v=h-(r-S)+(d-S),d=l[++c]),h=r,v!==0&&(m[g++]=v);for(;e<I;)r=h+a,S=r-h,v=h-(r-S)+(a-S),a=o[++e],h=r,v!==0&&(m[g++]=v);for(;c<f;)r=h+d,S=r-h,v=h-(r-S)+(d-S),d=l[++c],h=r,v!==0&&(m[g++]=v);return(h!==0||g===0)&&(m[g++]=h),g}function bt(I,o,f,l,m,h,r,v){return et(et(I,o,f,l,r),r,m,h,v)}function u(I,o,f,l){let m,h,r,v,S,a,d,e,c,g,p;d=_*f,g=d-(d-f),p=f-g;let E=o[0];m=E*f,d=_*E,e=d-(d-E),c=E-e,r=c*p-(m-e*g-c*g-e*p);let O=0;r!==0&&(l[O++]=r);for(let V=1;V<I;V++)E=o[V],v=E*f,d=_*E,e=d-(d-E),c=E-e,S=c*p-(v-e*g-c*g-e*p),h=m+S,a=h-m,r=m-(h-a)+(S-a),r!==0&&(l[O++]=r),m=v+h,r=h-(m-v),r!==0&&(l[O++]=r);return(m!==0||O===0)&&(l[O++]=m),O}function Yt(I,o){let f=o[0];for(let l=1;l<I;l++)f+=o[l];return f}function L(I){return new Float64Array(I)}const Zt=(3+16*at)*at,xt=(2+12*at)*at,Pt=(9+64*at)*at*at,At=L(4),Gt=L(8),Ht=L(12),Jt=L(16),ft=L(4);function tn(I,o,f,l,m,h,r){let v,S,a,d,e,c,g,p,E,O,V,G,x,K,P,R,nt,X;const it=I-m,ct=f-m,lt=o-h,tt=l-h;K=it*tt,c=_*it,g=c-(c-it),p=it-g,c=_*tt,E=c-(c-tt),O=tt-E,P=p*O-(K-g*E-p*E-g*O),R=lt*ct,c=_*lt,g=c-(c-lt),p=lt-g,c=_*ct,E=c-(c-ct),O=ct-E,nt=p*O-(R-g*E-p*E-g*O),V=P-nt,e=P-V,At[0]=P-(V+e)+(e-nt),G=K+V,e=G-K,x=K-(G-e)+(V-e),V=x-R,e=x-V,At[1]=x-(V+e)+(e-R),X=G+V,e=X-G,At[2]=G-(X-e)+(V-e),At[3]=X;let st=Yt(4,At),t=xt*r;if(st>=t||-st>=t||(e=I-it,v=I-(it+e)+(e-m),e=f-ct,a=f-(ct+e)+(e-m),e=o-lt,S=o-(lt+e)+(e-h),e=l-tt,d=l-(tt+e)+(e-h),v===0&&S===0&&a===0&&d===0)||(t=Pt*r+Xt*Math.abs(st),st+=it*d+tt*v-(lt*a+ct*S),st>=t||-st>=t))return st;K=v*tt,c=_*v,g=c-(c-v),p=v-g,c=_*tt,E=c-(c-tt),O=tt-E,P=p*O-(K-g*E-p*E-g*O),R=S*ct,c=_*S,g=c-(c-S),p=S-g,c=_*ct,E=c-(c-ct),O=ct-E,nt=p*O-(R-g*E-p*E-g*O),V=P-nt,e=P-V,ft[0]=P-(V+e)+(e-nt),G=K+V,e=G-K,x=K-(G-e)+(V-e),V=x-R,e=x-V,ft[1]=x-(V+e)+(e-R),X=G+V,e=X-G,ft[2]=G-(X-e)+(V-e),ft[3]=X;const n=et(4,At,4,ft,Gt);K=it*d,c=_*it,g=c-(c-it),p=it-g,c=_*d,E=c-(c-d),O=d-E,P=p*O-(K-g*E-p*E-g*O),R=lt*a,c=_*lt,g=c-(c-lt),p=lt-g,c=_*a,E=c-(c-a),O=a-E,nt=p*O-(R-g*E-p*E-g*O),V=P-nt,e=P-V,ft[0]=P-(V+e)+(e-nt),G=K+V,e=G-K,x=K-(G-e)+(V-e),V=x-R,e=x-V,ft[1]=x-(V+e)+(e-R),X=G+V,e=X-G,ft[2]=G-(X-e)+(V-e),ft[3]=X;const i=et(n,Gt,4,ft,Ht);K=v*d,c=_*v,g=c-(c-v),p=v-g,c=_*d,E=c-(c-d),O=d-E,P=p*O-(K-g*E-p*E-g*O),R=S*a,c=_*S,g=c-(c-S),p=S-g,c=_*a,E=c-(c-a),O=a-E,nt=p*O-(R-g*E-p*E-g*O),V=P-nt,e=P-V,ft[0]=P-(V+e)+(e-nt),G=K+V,e=G-K,x=K-(G-e)+(V-e),V=x-R,e=x-V,ft[1]=x-(V+e)+(e-R),X=G+V,e=X-G,ft[2]=G-(X-e)+(V-e),ft[3]=X;const b=et(i,Ht,4,ft,Jt);return Jt[b-1]}function Ft(I,o,f,l,m,h){const r=(o-h)*(f-m),v=(I-m)*(l-h),S=r-v,a=Math.abs(r+v);return Math.abs(S)>=Zt*a?S:-tn(I,o,f,l,m,h,a)}const nn=(10+96*at)*at,sn=(4+48*at)*at,en=(44+576*at)*at*at,Et=L(4),jt=L(4),pt=L(4),wt=L(4),mt=L(4),gt=L(4),ht=L(4),ut=L(4),Tt=L(8),Ut=L(8),Nt=L(8),qt=L(8),Lt=L(8),$t=L(8),Vt=L(8),It=L(8),Qt=L(8),Wt=L(4),Ct=L(4),St=L(4),C=L(8),F=L(16),H=L(16),J=L(16),z=L(32),_t=L(32),Y=L(48),dt=L(64);let Bt=L(1152),yt=L(1152);function Z(I,o,f){I=et(I,Bt,o,f,yt);const l=Bt;return Bt=yt,yt=l,I}function on(I,o,f,l,m,h,r,v,S){let a,d,e,c,g,p,E,O,V,G,x,K,P,R,nt,X,it,ct,lt,tt,st,t,n,i,b,w,W,s,M,D,j,A,B,Q,k;const T=I-r,U=f-r,N=m-r,$=o-v,q=l-v,y=h-v;j=U*y,n=_*U,i=n-(n-U),b=U-i,n=_*y,w=n-(n-y),W=y-w,A=b*W-(j-i*w-b*w-i*W),B=N*q,n=_*N,i=n-(n-N),b=N-i,n=_*q,w=n-(n-q),W=q-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,Et[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,Et[1]=D-(s+t)+(t-B),k=M+s,t=k-M,Et[2]=M-(k-t)+(s-t),Et[3]=k,j=N*$,n=_*N,i=n-(n-N),b=N-i,n=_*$,w=n-(n-$),W=$-w,A=b*W-(j-i*w-b*w-i*W),B=T*y,n=_*T,i=n-(n-T),b=T-i,n=_*y,w=n-(n-y),W=y-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,jt[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,jt[1]=D-(s+t)+(t-B),k=M+s,t=k-M,jt[2]=M-(k-t)+(s-t),jt[3]=k,j=T*q,n=_*T,i=n-(n-T),b=T-i,n=_*q,w=n-(n-q),W=q-w,A=b*W-(j-i*w-b*w-i*W),B=U*$,n=_*U,i=n-(n-U),b=U-i,n=_*$,w=n-(n-$),W=$-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,pt[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,pt[1]=D-(s+t)+(t-B),k=M+s,t=k-M,pt[2]=M-(k-t)+(s-t),pt[3]=k,a=et(et(et(u(u(4,Et,T,C),C,T,F),F,u(u(4,Et,$,C),C,$,H),H,z),z,et(u(u(4,jt,U,C),C,U,F),F,u(u(4,jt,q,C),C,q,H),H,_t),_t,dt),dt,et(u(u(4,pt,N,C),C,N,F),F,u(u(4,pt,y,C),C,y,H),H,z),z,Bt);let Mt=Yt(a,Bt),kt=sn*S;if(Mt>=kt||-Mt>=kt||(t=I-T,d=I-(T+t)+(t-r),t=o-$,g=o-($+t)+(t-v),t=f-U,e=f-(U+t)+(t-r),t=l-q,p=l-(q+t)+(t-v),t=m-N,c=m-(N+t)+(t-r),t=h-y,E=h-(y+t)+(t-v),d===0&&e===0&&c===0&&g===0&&p===0&&E===0)||(kt=en*S+Xt*Math.abs(Mt),Mt+=(T*T+$*$)*(U*E+y*e-(q*c+N*p))+2*(T*d+$*g)*(U*y-q*N)+((U*U+q*q)*(N*g+$*c-(y*d+T*E))+2*(U*e+q*p)*(N*$-y*T))+((N*N+y*y)*(T*p+q*d-($*e+U*g))+2*(N*c+y*E)*(T*q-$*U)),Mt>=kt||-Mt>=kt))return Mt;if((e!==0||p!==0||c!==0||E!==0)&&(j=T*T,n=_*T,i=n-(n-T),b=T-i,A=b*b-(j-i*i-(i+i)*b),B=$*$,n=_*$,i=n-(n-$),b=$-i,Q=b*b-(B-i*i-(i+i)*b),s=A+Q,t=s-A,wt[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,wt[1]=D-(s-t)+(B-t),k=M+s,t=k-M,wt[2]=M-(k-t)+(s-t),wt[3]=k),(c!==0||E!==0||d!==0||g!==0)&&(j=U*U,n=_*U,i=n-(n-U),b=U-i,A=b*b-(j-i*i-(i+i)*b),B=q*q,n=_*q,i=n-(n-q),b=q-i,Q=b*b-(B-i*i-(i+i)*b),s=A+Q,t=s-A,mt[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,mt[1]=D-(s-t)+(B-t),k=M+s,t=k-M,mt[2]=M-(k-t)+(s-t),mt[3]=k),(d!==0||g!==0||e!==0||p!==0)&&(j=N*N,n=_*N,i=n-(n-N),b=N-i,A=b*b-(j-i*i-(i+i)*b),B=y*y,n=_*y,i=n-(n-y),b=y-i,Q=b*b-(B-i*i-(i+i)*b),s=A+Q,t=s-A,gt[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,gt[1]=D-(s-t)+(B-t),k=M+s,t=k-M,gt[2]=M-(k-t)+(s-t),gt[3]=k),d!==0&&(O=u(4,Et,d,Tt),a=Z(a,bt(u(O,Tt,2*T,F),F,u(u(4,gt,d,C),C,q,H),H,u(u(4,mt,d,C),C,-y,J),J,z,Y),Y)),g!==0&&(V=u(4,Et,g,Ut),a=Z(a,bt(u(V,Ut,2*$,F),F,u(u(4,mt,g,C),C,N,H),H,u(u(4,gt,g,C),C,-U,J),J,z,Y),Y)),e!==0&&(G=u(4,jt,e,Nt),a=Z(a,bt(u(G,Nt,2*U,F),F,u(u(4,wt,e,C),C,y,H),H,u(u(4,gt,e,C),C,-$,J),J,z,Y),Y)),p!==0&&(x=u(4,jt,p,qt),a=Z(a,bt(u(x,qt,2*q,F),F,u(u(4,gt,p,C),C,T,H),H,u(u(4,wt,p,C),C,-N,J),J,z,Y),Y)),c!==0&&(K=u(4,pt,c,Lt),a=Z(a,bt(u(K,Lt,2*N,F),F,u(u(4,mt,c,C),C,$,H),H,u(u(4,wt,c,C),C,-q,J),J,z,Y),Y)),E!==0&&(P=u(4,pt,E,$t),a=Z(a,bt(u(P,$t,2*y,F),F,u(u(4,wt,E,C),C,U,H),H,u(u(4,mt,E,C),C,-T,J),J,z,Y),Y)),d!==0||g!==0){if(e!==0||p!==0||c!==0||E!==0?(j=e*y,n=_*e,i=n-(n-e),b=e-i,n=_*y,w=n-(n-y),W=y-w,A=b*W-(j-i*w-b*w-i*W),B=U*E,n=_*U,i=n-(n-U),b=U-i,n=_*E,w=n-(n-E),W=E-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ht[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ht[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ht[2]=M-(k-t)+(s-t),ht[3]=k,j=c*-q,n=_*c,i=n-(n-c),b=c-i,n=_*-q,w=n-(n- -q),W=-q-w,A=b*W-(j-i*w-b*w-i*W),B=N*-p,n=_*N,i=n-(n-N),b=N-i,n=_*-p,w=n-(n- -p),W=-p-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ut[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ut[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ut[2]=M-(k-t)+(s-t),ut[3]=k,nt=et(4,ht,4,ut,It),j=e*E,n=_*e,i=n-(n-e),b=e-i,n=_*E,w=n-(n-E),W=E-w,A=b*W-(j-i*w-b*w-i*W),B=c*p,n=_*c,i=n-(n-c),b=c-i,n=_*p,w=n-(n-p),W=p-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,Ct[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,Ct[1]=D-(s+t)+(t-B),k=M+s,t=k-M,Ct[2]=M-(k-t)+(s-t),Ct[3]=k,ct=4):(It[0]=0,nt=1,Ct[0]=0,ct=1),d!==0){const ot=u(nt,It,d,J);a=Z(a,et(u(O,Tt,d,F),F,u(ot,J,2*T,z),z,Y),Y);const rt=u(ct,Ct,d,C);a=Z(a,bt(u(rt,C,2*T,F),F,u(rt,C,d,H),H,u(ot,J,d,z),z,_t,dt),dt),p!==0&&(a=Z(a,u(u(4,gt,d,C),C,p,F),F)),E!==0&&(a=Z(a,u(u(4,mt,-d,C),C,E,F),F))}if(g!==0){const ot=u(nt,It,g,J);a=Z(a,et(u(V,Ut,g,F),F,u(ot,J,2*$,z),z,Y),Y);const rt=u(ct,Ct,g,C);a=Z(a,bt(u(rt,C,2*$,F),F,u(rt,C,g,H),H,u(ot,J,g,z),z,_t,dt),dt)}}if(e!==0||p!==0){if(c!==0||E!==0||d!==0||g!==0?(j=c*$,n=_*c,i=n-(n-c),b=c-i,n=_*$,w=n-(n-$),W=$-w,A=b*W-(j-i*w-b*w-i*W),B=N*g,n=_*N,i=n-(n-N),b=N-i,n=_*g,w=n-(n-g),W=g-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ht[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ht[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ht[2]=M-(k-t)+(s-t),ht[3]=k,tt=-y,st=-E,j=d*tt,n=_*d,i=n-(n-d),b=d-i,n=_*tt,w=n-(n-tt),W=tt-w,A=b*W-(j-i*w-b*w-i*W),B=T*st,n=_*T,i=n-(n-T),b=T-i,n=_*st,w=n-(n-st),W=st-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ut[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ut[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ut[2]=M-(k-t)+(s-t),ut[3]=k,X=et(4,ht,4,ut,Qt),j=c*g,n=_*c,i=n-(n-c),b=c-i,n=_*g,w=n-(n-g),W=g-w,A=b*W-(j-i*w-b*w-i*W),B=d*E,n=_*d,i=n-(n-d),b=d-i,n=_*E,w=n-(n-E),W=E-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,St[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,St[1]=D-(s+t)+(t-B),k=M+s,t=k-M,St[2]=M-(k-t)+(s-t),St[3]=k,lt=4):(Qt[0]=0,X=1,St[0]=0,lt=1),e!==0){const ot=u(X,Qt,e,J);a=Z(a,et(u(G,Nt,e,F),F,u(ot,J,2*U,z),z,Y),Y);const rt=u(lt,St,e,C);a=Z(a,bt(u(rt,C,2*U,F),F,u(rt,C,e,H),H,u(ot,J,e,z),z,_t,dt),dt),E!==0&&(a=Z(a,u(u(4,wt,e,C),C,E,F),F)),g!==0&&(a=Z(a,u(u(4,gt,-e,C),C,g,F),F))}if(p!==0){const ot=u(X,Qt,p,J);a=Z(a,et(u(x,qt,p,F),F,u(ot,J,2*q,z),z,Y),Y);const rt=u(lt,St,p,C);a=Z(a,bt(u(rt,C,2*q,F),F,u(rt,C,p,H),H,u(ot,J,p,z),z,_t,dt),dt)}}if(c!==0||E!==0){if(d!==0||g!==0||e!==0||p!==0?(j=d*q,n=_*d,i=n-(n-d),b=d-i,n=_*q,w=n-(n-q),W=q-w,A=b*W-(j-i*w-b*w-i*W),B=T*p,n=_*T,i=n-(n-T),b=T-i,n=_*p,w=n-(n-p),W=p-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ht[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ht[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ht[2]=M-(k-t)+(s-t),ht[3]=k,tt=-$,st=-g,j=e*tt,n=_*e,i=n-(n-e),b=e-i,n=_*tt,w=n-(n-tt),W=tt-w,A=b*W-(j-i*w-b*w-i*W),B=U*st,n=_*U,i=n-(n-U),b=U-i,n=_*st,w=n-(n-st),W=st-w,Q=b*W-(B-i*w-b*w-i*W),s=A+Q,t=s-A,ut[0]=A-(s-t)+(Q-t),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D+B,t=s-D,ut[1]=D-(s-t)+(B-t),k=M+s,t=k-M,ut[2]=M-(k-t)+(s-t),ut[3]=k,R=et(4,ht,4,ut,Vt),j=d*p,n=_*d,i=n-(n-d),b=d-i,n=_*p,w=n-(n-p),W=p-w,A=b*W-(j-i*w-b*w-i*W),B=e*g,n=_*e,i=n-(n-e),b=e-i,n=_*g,w=n-(n-g),W=g-w,Q=b*W-(B-i*w-b*w-i*W),s=A-Q,t=A-s,Wt[0]=A-(s+t)+(t-Q),M=j+s,t=M-j,D=j-(M-t)+(s-t),s=D-B,t=D-s,Wt[1]=D-(s+t)+(t-B),k=M+s,t=k-M,Wt[2]=M-(k-t)+(s-t),Wt[3]=k,it=4):(Vt[0]=0,R=1,Wt[0]=0,it=1),c!==0){const ot=u(R,Vt,c,J);a=Z(a,et(u(K,Lt,c,F),F,u(ot,J,2*N,z),z,Y),Y);const rt=u(it,Wt,c,C);a=Z(a,bt(u(rt,C,2*N,F),F,u(rt,C,c,H),H,u(ot,J,c,z),z,_t,dt),dt),g!==0&&(a=Z(a,u(u(4,mt,c,C),C,g,F),F)),p!==0&&(a=Z(a,u(u(4,wt,-c,C),C,p,F),F))}if(E!==0){const ot=u(R,Vt,E,J);a=Z(a,et(u(P,$t,E,F),F,u(ot,J,2*y,z),z,Y),Y);const rt=u(it,Wt,E,C);a=Z(a,bt(u(rt,C,2*y,F),F,u(rt,C,E,H),H,u(ot,J,E,z),z,_t,dt),dt)}}return Bt[a-1]}function rn(I,o,f,l,m,h,r,v){const S=I-r,a=f-r,d=m-r,e=o-v,c=l-v,g=h-v,p=a*g,E=d*c,O=S*S+e*e,V=d*e,G=S*g,x=a*a+c*c,K=S*c,P=a*e,R=d*d+g*g,nt=O*(p-E)+x*(V-G)+R*(K-P),X=(Math.abs(p)+Math.abs(E))*O+(Math.abs(V)+Math.abs(G))*x+(Math.abs(K)+Math.abs(P))*R,it=nn*X;return nt>it||-nt>it?nt:on(I,o,f,l,m,h,r,v,X)}class cn{constructor(o,f){this.W=o,this.bs=f}add(o){const f=this.W,l=o/f|0,m=o%f;return this.bs[l]|=1<<m,this}delete(o){const f=this.W,l=o/f|0,m=o%f;return this.bs[l]&=~(1<<m),this}set(o,f){const l=this.W,m=o/l|0,h=o%l,r=1<<h;return this.bs[m]^=(-f^this.bs[m])&r,f}has(o){const f=this.W,l=o/f|0,m=o%f;return!!(this.bs[l]&1<<m)}forEach(o){const f=this.W,l=this.bs,m=l.length;for(let h=0;h<m;h++){let r=0;for(;l[h]&&r<f;)l[h]&1<<r&&o(h*f+r),r++}return this}}class Kt extends cn{constructor(o){const l=new Uint8Array(Math.ceil(o/8)).fill(0);super(8,l)}}function Dt(I){return I%3===2?I-2:I+1}function vt(I){return I%3===0?I+2:I-1}function Rt(I,o,f,l,m,h,r,v){const S=Ft(I,o,m,h,r,v),a=Ft(f,l,m,h,r,v);if(S>0&&a>0||S<0&&a<0)return!1;const d=Ft(m,h,I,o,f,l),e=Ft(r,v,I,o,f,l);return d>0&&e>0||d<0&&e<0?!1:S===0&&a===0&&d===0&&e===0?!(Math.max(m,r)<Math.min(I,f)||Math.max(I,f)<Math.min(m,r)||Math.max(h,v)<Math.min(o,l)||Math.max(o,l)<Math.min(h,v)):!0}class ln{constructor(o){this.del=o}}const zt=class zt extends ln{constructor(o,f){if(!o||typeof o!="object"||!o.triangles||!o.halfedges||!o.coords)throw new Error("Expected an object with Delaunator output");if(o.triangles.length%3||o.halfedges.length!==o.triangles.length||o.coords.length%2)throw new Error("Delaunator output appears inconsistent");if(o.triangles.length<3)throw new Error("No edges in triangulation");super(o);const l=2**32-1,m=o.coords.length>>1,h=o.triangles.length;this.vertMap=new Uint32Array(m).fill(l),this.flips=new Kt(h),this.consd=new Kt(h);for(let r=0;r<h;r++){const v=o.triangles[r];this.vertMap[v]===l&&this.updateVert(r)}f&&this.constrainAll(f)}constrainOne(o,f){const{triangles:l,halfedges:m}=this.del,h=this.vertMap[o];let r=h;do{const a=l[r],d=Dt(r);if(a===f)return this.protect(r);const e=vt(r),c=l[e];if(c===f)return this.protect(d),d;if(this.intersectSegments(o,f,c,a)){r=e;break}r=m[d]}while(r!==-1&&r!==h);let v=r,S=-1;for(;r!==-1;){const a=m[r],d=vt(r),e=vt(a),c=Dt(a);if(a===-1)throw new Error("Constraining edge exited the hull");if(this.consd.has(r))throw new Error("Edge intersects already constrained edge");if(this.isCollinear(o,f,l[r])||this.isCollinear(o,f,l[a]))throw new Error("Constraining edge intersects point");if(!this.intersectSegments(l[r],l[a],l[d],l[e])){if(S===-1&&(S=r),l[e]===f){if(r===S)throw new Error("Infinite loop: non-convex quadrilateral");r=S,S=-1;continue}if(this.intersectSegments(o,f,l[e],l[a]))r=e;else if(this.intersectSegments(o,f,l[c],l[e]))r=c;else if(S===r)throw new Error("Infinite loop: no further intersect after non-convex");continue}if(this.flipDiagonal(r),this.intersectSegments(o,f,l[d],l[e])&&(S===-1&&(S=d),S===d))throw new Error("Infinite loop: flipped diagonal still intersects");l[e]===f?(v=e,r=S,S=-1):this.intersectSegments(o,f,l[c],l[e])&&(r=c)}return this.protect(v),this.delaunify(!0),this.findEdge(o,f)}delaunify(o=!1){const{halfedges:f}=this.del,l=this.flips,m=this.consd,h=f.length;do{var r=0;for(let v=0;v<h;v++){if(m.has(v))continue;l.delete(v);const S=f[v];S!==-1&&(l.delete(S),this.isDelaunay(v)||(this.flipDiagonal(v),r++))}}while(o&&r>0);return this}constrainAll(o){const f=o.length;for(let l=0;l<f;l++){const m=o[l];this.constrainOne(m[0],m[1])}return this}isConstrained(o){return this.consd.has(o)}findEdge(o,f){const l=this.vertMap[f],{triangles:m,halfedges:h}=this.del;let r=l,v=-1;do{if(m[r]===o)return r;v=Dt(r),r=h[v]}while(r!==-1&&r!==l);return m[Dt(v)]===o?-v:1/0}protect(o){const f=this.del.halfedges[o],l=this.flips,m=this.consd;return l.delete(o),m.add(o),f!==-1?(l.delete(f),m.add(f),f):-o}markFlip(o){const f=this.del.halfedges,l=this.flips;if(this.consd.has(o))return!1;const h=f[o];return h!==-1&&(l.add(o),l.add(h)),!0}flipDiagonal(o){const{triangles:f,halfedges:l}=this.del,m=this.flips,h=this.consd,r=l[o],v=vt(o),S=Dt(o),a=vt(r),d=Dt(r),e=l[v],c=l[a];if(h.has(o))throw new Error("Trying to flip a constrained edge");return f[o]=f[a],l[o]=c,m.set(o,m.has(a))||h.set(o,h.has(a)),c!==-1&&(l[c]=o),l[v]=a,f[r]=f[v],l[r]=e,m.set(r,m.has(v))||h.set(r,h.has(v)),e!==-1&&(l[e]=r),l[a]=v,this.markFlip(o),this.markFlip(S),this.markFlip(r),this.markFlip(d),m.add(v),h.delete(v),m.add(a),h.delete(a),this.updateVert(o),this.updateVert(S),this.updateVert(r),this.updateVert(d),v}isCollinear(o,f,l){const m=this.del.coords;return Ft(m[o*2],m[o*2+1],m[f*2],m[f*2+1],m[l*2],m[l*2+1])===0}inCircle(o,f,l,m){const h=this.del.coords;return rn(h[o*2],h[o*2+1],h[f*2],h[f*2+1],h[l*2],h[l*2+1],h[m*2],h[m*2+1])<0}isDelaunay(o){const{triangles:f,halfedges:l}=this.del,m=l[o];if(m===-1)return!0;const h=f[vt(o)],r=f[o],v=f[Dt(o)],S=f[vt(m)];return!this.inCircle(h,r,v,S)}updateVert(o){const{triangles:f,halfedges:l}=this.del,m=this.vertMap,h=f[o];let r=vt(o),v=l[r];for(;v!==-1&&v!==o;)r=vt(v),v=l[r];return m[h]=r,r}intersectSegments(o,f,l,m){const h=this.del.coords;return o===l||o===m||f===l||f===m?!1:Rt(h[o*2],h[o*2+1],h[f*2],h[f*2+1],h[l*2],h[l*2+1],h[m*2],h[m*2+1])}};zt.intersectSegments=Rt;let Ot=zt;exports.Constrain=Ot;exports.default=Ot;