UNPKG

@kninnug/constrainautor

Version:

A small library for constraining a Delaunator triangulation

2 lines (1 loc) 16.7 kB
const t=11102230246251565e-32,n=134217729,r=(3+8*t)*t;function i(t,n,r,i,e){let s,o,h,c,f=n[0],a=i[0],u=0,l=0;a>f==a>-f?(s=f,f=n[++u]):(s=a,a=i[++l]);let d=0;if(u<t&&l<r)for(a>f==a>-f?(o=f+s,h=s-(o-f),f=n[++u]):(o=a+s,h=s-(o-a),a=i[++l]),s=o,0!==h&&(e[d++]=h);u<t&&l<r;)a>f==a>-f?(o=s+f,c=o-s,h=s-(o-c)+(f-c),f=n[++u]):(o=s+a,c=o-s,h=s-(o-c)+(a-c),a=i[++l]),s=o,0!==h&&(e[d++]=h);for(;u<t;)o=s+f,c=o-s,h=s-(o-c)+(f-c),f=n[++u],s=o,0!==h&&(e[d++]=h);for(;l<r;)o=s+a,c=o-s,h=s-(o-c)+(a-c),a=i[++l],s=o,0!==h&&(e[d++]=h);return 0===s&&0!==d||(e[d++]=s),d}function e(t,n,r,e,s,o,h,c){return i(i(t,n,r,e,h),h,s,o,c)}function s(t,r,i,e){let s,o,h,c,f,a,u,l,d,w,g;u=n*i,w=u-(u-i),g=i-w;let p=r[0];s=p*i,u=n*p,l=u-(u-p),d=p-l,h=d*g-(s-l*w-d*w-l*g);let M=0;0!==h&&(e[M++]=h);for(let E=1;E<t;E++)p=r[E],c=p*i,u=n*p,l=u-(u-p),d=p-l,f=d*g-(c-l*w-d*w-l*g),o=s+f,a=o-s,h=s-(o-a)+(f-a),0!==h&&(e[M++]=h),s=c+o,h=o-(s-c),0!==h&&(e[M++]=h);return 0===s&&0!==M||(e[M++]=s),M}function o(t,n){let r=n[0];for(let i=1;i<t;i++)r+=n[i];return r}function h(t){return new Float64Array(t)}const c=33306690738754716e-32,f=22204460492503146e-32,a=11093356479670487e-47,u=h(4),l=h(8),d=h(12),w=h(16),g=h(4);function p(t,e,s,h,p,M){const E=(e-M)*(s-p),y=(t-p)*(h-M),x=E-y,C=Math.abs(E+y);return Math.abs(x)>=c*C?x:-function(t,e,s,h,c,p,M){let E,y,x,C,v,A,D,b,I,j,k,m,F,U,q,N,O,S;const T=t-c,V=s-c,z=e-p,B=h-p;U=T*B,A=n*T,D=A-(A-T),b=T-D,A=n*B,I=A-(A-B),j=B-I,q=b*j-(U-D*I-b*I-D*j),N=z*V,A=n*z,D=A-(A-z),b=z-D,A=n*V,I=A-(A-V),j=V-I,O=b*j-(N-D*I-b*I-D*j),k=q-O,v=q-k,u[0]=q-(k+v)+(v-O),m=U+k,v=m-U,F=U-(m-v)+(k-v),k=F-N,v=F-k,u[1]=F-(k+v)+(v-N),S=m+k,v=S-m,u[2]=m-(S-v)+(k-v),u[3]=S;let G=o(4,u),H=f*M;if(G>=H||-G>=H)return G;if(v=t-T,E=t-(T+v)+(v-c),v=s-V,x=s-(V+v)+(v-c),v=e-z,y=e-(z+v)+(v-p),v=h-B,C=h-(B+v)+(v-p),0===E&&0===y&&0===x&&0===C)return G;if(H=a*M+r*Math.abs(G),G+=T*C+B*E-(z*x+V*y),G>=H||-G>=H)return G;U=E*B,A=n*E,D=A-(A-E),b=E-D,A=n*B,I=A-(A-B),j=B-I,q=b*j-(U-D*I-b*I-D*j),N=y*V,A=n*y,D=A-(A-y),b=y-D,A=n*V,I=A-(A-V),j=V-I,O=b*j-(N-D*I-b*I-D*j),k=q-O,v=q-k,g[0]=q-(k+v)+(v-O),m=U+k,v=m-U,F=U-(m-v)+(k-v),k=F-N,v=F-k,g[1]=F-(k+v)+(v-N),S=m+k,v=S-m,g[2]=m-(S-v)+(k-v),g[3]=S;const J=i(4,u,4,g,l);U=T*C,A=n*T,D=A-(A-T),b=T-D,A=n*C,I=A-(A-C),j=C-I,q=b*j-(U-D*I-b*I-D*j),N=z*x,A=n*z,D=A-(A-z),b=z-D,A=n*x,I=A-(A-x),j=x-I,O=b*j-(N-D*I-b*I-D*j),k=q-O,v=q-k,g[0]=q-(k+v)+(v-O),m=U+k,v=m-U,F=U-(m-v)+(k-v),k=F-N,v=F-k,g[1]=F-(k+v)+(v-N),S=m+k,v=S-m,g[2]=m-(S-v)+(k-v),g[3]=S;const K=i(J,l,4,g,d);U=E*C,A=n*E,D=A-(A-E),b=E-D,A=n*C,I=A-(A-C),j=C-I,q=b*j-(U-D*I-b*I-D*j),N=y*x,A=n*y,D=A-(A-y),b=y-D,A=n*x,I=A-(A-x),j=x-I,O=b*j-(N-D*I-b*I-D*j),k=q-O,v=q-k,g[0]=q-(k+v)+(v-O),m=U+k,v=m-U,F=U-(m-v)+(k-v),k=F-N,v=F-k,g[1]=F-(k+v)+(v-N),S=m+k,v=S-m,g[2]=m-(S-v)+(k-v),g[3]=S;const L=i(K,d,4,g,w);return w[L-1]}(t,e,s,h,p,M,C)}const M=4440892098500632e-31,E=5423418723394464e-46,y=h(4),x=h(4),C=h(4),v=h(4),A=h(4),D=h(4),b=h(4),I=h(4),j=h(8),k=h(8),m=h(8),F=h(8),U=h(8),q=h(8),N=h(8),O=h(8),S=h(8),T=h(4),V=h(4),z=h(4),B=h(8),G=h(16),H=h(16),J=h(16),K=h(32),L=h(32),P=h(48),Q=h(64);let R=h(1152),W=h(1152);function X(t,n,r){t=i(t,R,n,r,W);const e=R;return R=W,W=e,t}function Y(t,h,c,f,a,u,l,d){const w=t-l,g=c-l,p=a-l,W=h-d,Y=f-d,Z=u-d,$=g*Z,_=p*Y,tt=w*w+W*W,nt=p*W,rt=w*Z,it=g*g+Y*Y,et=w*Y,st=g*W,ot=p*p+Z*Z,ht=tt*($-_)+it*(nt-rt)+ot*(et-st),ct=(Math.abs($)+Math.abs(_))*tt+(Math.abs(nt)+Math.abs(rt))*it+(Math.abs(et)+Math.abs(st))*ot,ft=11102230246251577e-31*ct;return ht>ft||-ht>ft?ht:function(t,h,c,f,a,u,l,d,w){let g,p,W,Y,Z,$,_,tt,nt,rt,it,et,st,ot,ht,ct,ft,at,ut,lt,dt,wt,gt,pt,Mt,Et,yt,xt,Ct,vt,At,Dt,bt,It,jt;const kt=t-l,mt=c-l,Ft=a-l,Ut=h-d,qt=f-d,Nt=u-d;At=mt*Nt,gt=n*mt,pt=gt-(gt-mt),Mt=mt-pt,gt=n*Nt,Et=gt-(gt-Nt),yt=Nt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=Ft*qt,gt=n*Ft,pt=gt-(gt-Ft),Mt=Ft-pt,gt=n*qt,Et=gt-(gt-qt),yt=qt-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,y[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,y[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,y[2]=Ct-(jt-wt)+(xt-wt),y[3]=jt,At=Ft*Ut,gt=n*Ft,pt=gt-(gt-Ft),Mt=Ft-pt,gt=n*Ut,Et=gt-(gt-Ut),yt=Ut-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=kt*Nt,gt=n*kt,pt=gt-(gt-kt),Mt=kt-pt,gt=n*Nt,Et=gt-(gt-Nt),yt=Nt-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,x[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,x[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,x[2]=Ct-(jt-wt)+(xt-wt),x[3]=jt,At=kt*qt,gt=n*kt,pt=gt-(gt-kt),Mt=kt-pt,gt=n*qt,Et=gt-(gt-qt),yt=qt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=mt*Ut,gt=n*mt,pt=gt-(gt-mt),Mt=mt-pt,gt=n*Ut,Et=gt-(gt-Ut),yt=Ut-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,C[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,C[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,C[2]=Ct-(jt-wt)+(xt-wt),C[3]=jt,g=i(i(i(s(s(4,y,kt,B),B,kt,G),G,s(s(4,y,Ut,B),B,Ut,H),H,K),K,i(s(s(4,x,mt,B),B,mt,G),G,s(s(4,x,qt,B),B,qt,H),H,L),L,Q),Q,i(s(s(4,C,Ft,B),B,Ft,G),G,s(s(4,C,Nt,B),B,Nt,H),H,K),K,R);let Ot=o(g,R),St=M*w;if(Ot>=St||-Ot>=St)return Ot;if(wt=t-kt,p=t-(kt+wt)+(wt-l),wt=h-Ut,Z=h-(Ut+wt)+(wt-d),wt=c-mt,W=c-(mt+wt)+(wt-l),wt=f-qt,$=f-(qt+wt)+(wt-d),wt=a-Ft,Y=a-(Ft+wt)+(wt-l),wt=u-Nt,_=u-(Nt+wt)+(wt-d),0===p&&0===W&&0===Y&&0===Z&&0===$&&0===_)return Ot;if(St=E*w+r*Math.abs(Ot),Ot+=(kt*kt+Ut*Ut)*(mt*_+Nt*W-(qt*Y+Ft*$))+2*(kt*p+Ut*Z)*(mt*Nt-qt*Ft)+((mt*mt+qt*qt)*(Ft*Z+Ut*Y-(Nt*p+kt*_))+2*(mt*W+qt*$)*(Ft*Ut-Nt*kt))+((Ft*Ft+Nt*Nt)*(kt*$+qt*p-(Ut*W+mt*Z))+2*(Ft*Y+Nt*_)*(kt*qt-Ut*mt)),Ot>=St||-Ot>=St)return Ot;if(0===W&&0===$&&0===Y&&0===_||(At=kt*kt,gt=n*kt,pt=gt-(gt-kt),Mt=kt-pt,Dt=Mt*Mt-(At-pt*pt-(pt+pt)*Mt),bt=Ut*Ut,gt=n*Ut,pt=gt-(gt-Ut),Mt=Ut-pt,It=Mt*Mt-(bt-pt*pt-(pt+pt)*Mt),xt=Dt+It,wt=xt-Dt,v[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,v[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,v[2]=Ct-(jt-wt)+(xt-wt),v[3]=jt),0===Y&&0===_&&0===p&&0===Z||(At=mt*mt,gt=n*mt,pt=gt-(gt-mt),Mt=mt-pt,Dt=Mt*Mt-(At-pt*pt-(pt+pt)*Mt),bt=qt*qt,gt=n*qt,pt=gt-(gt-qt),Mt=qt-pt,It=Mt*Mt-(bt-pt*pt-(pt+pt)*Mt),xt=Dt+It,wt=xt-Dt,A[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,A[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,A[2]=Ct-(jt-wt)+(xt-wt),A[3]=jt),0===p&&0===Z&&0===W&&0===$||(At=Ft*Ft,gt=n*Ft,pt=gt-(gt-Ft),Mt=Ft-pt,Dt=Mt*Mt-(At-pt*pt-(pt+pt)*Mt),bt=Nt*Nt,gt=n*Nt,pt=gt-(gt-Nt),Mt=Nt-pt,It=Mt*Mt-(bt-pt*pt-(pt+pt)*Mt),xt=Dt+It,wt=xt-Dt,D[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,D[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,D[2]=Ct-(jt-wt)+(xt-wt),D[3]=jt),0!==p&&(tt=s(4,y,p,j),g=X(g,e(s(tt,j,2*kt,G),G,s(s(4,D,p,B),B,qt,H),H,s(s(4,A,p,B),B,-Nt,J),J,K,P),P)),0!==Z&&(nt=s(4,y,Z,k),g=X(g,e(s(nt,k,2*Ut,G),G,s(s(4,A,Z,B),B,Ft,H),H,s(s(4,D,Z,B),B,-mt,J),J,K,P),P)),0!==W&&(rt=s(4,x,W,m),g=X(g,e(s(rt,m,2*mt,G),G,s(s(4,v,W,B),B,Nt,H),H,s(s(4,D,W,B),B,-Ut,J),J,K,P),P)),0!==$&&(it=s(4,x,$,F),g=X(g,e(s(it,F,2*qt,G),G,s(s(4,D,$,B),B,kt,H),H,s(s(4,v,$,B),B,-Ft,J),J,K,P),P)),0!==Y&&(et=s(4,C,Y,U),g=X(g,e(s(et,U,2*Ft,G),G,s(s(4,A,Y,B),B,Ut,H),H,s(s(4,v,Y,B),B,-qt,J),J,K,P),P)),0!==_&&(st=s(4,C,_,q),g=X(g,e(s(st,q,2*Nt,G),G,s(s(4,v,_,B),B,mt,H),H,s(s(4,A,_,B),B,-kt,J),J,K,P),P)),0!==p||0!==Z){if(0!==W||0!==$||0!==Y||0!==_?(At=W*Nt,gt=n*W,pt=gt-(gt-W),Mt=W-pt,gt=n*Nt,Et=gt-(gt-Nt),yt=Nt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=mt*_,gt=n*mt,pt=gt-(gt-mt),Mt=mt-pt,gt=n*_,Et=gt-(gt-_),yt=_-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,b[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,b[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,b[2]=Ct-(jt-wt)+(xt-wt),b[3]=jt,At=Y*-qt,gt=n*Y,pt=gt-(gt-Y),Mt=Y-pt,gt=n*-qt,Et=gt-(gt- -qt),yt=-qt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=Ft*-$,gt=n*Ft,pt=gt-(gt-Ft),Mt=Ft-pt,gt=n*-$,Et=gt-(gt- -$),yt=-$-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,I[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,I[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,I[2]=Ct-(jt-wt)+(xt-wt),I[3]=jt,ht=i(4,b,4,I,O),At=W*_,gt=n*W,pt=gt-(gt-W),Mt=W-pt,gt=n*_,Et=gt-(gt-_),yt=_-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=Y*$,gt=n*Y,pt=gt-(gt-Y),Mt=Y-pt,gt=n*$,Et=gt-(gt-$),yt=$-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,V[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,V[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,V[2]=Ct-(jt-wt)+(xt-wt),V[3]=jt,at=4):(O[0]=0,ht=1,V[0]=0,at=1),0!==p){const t=s(ht,O,p,J);g=X(g,i(s(tt,j,p,G),G,s(t,J,2*kt,K),K,P),P);const n=s(at,V,p,B);g=X(g,e(s(n,B,2*kt,G),G,s(n,B,p,H),H,s(t,J,p,K),K,L,Q),Q),0!==$&&(g=X(g,s(s(4,D,p,B),B,$,G),G)),0!==_&&(g=X(g,s(s(4,A,-p,B),B,_,G),G))}if(0!==Z){const t=s(ht,O,Z,J);g=X(g,i(s(nt,k,Z,G),G,s(t,J,2*Ut,K),K,P),P);const n=s(at,V,Z,B);g=X(g,e(s(n,B,2*Ut,G),G,s(n,B,Z,H),H,s(t,J,Z,K),K,L,Q),Q)}}if(0!==W||0!==$){if(0!==Y||0!==_||0!==p||0!==Z?(At=Y*Ut,gt=n*Y,pt=gt-(gt-Y),Mt=Y-pt,gt=n*Ut,Et=gt-(gt-Ut),yt=Ut-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=Ft*Z,gt=n*Ft,pt=gt-(gt-Ft),Mt=Ft-pt,gt=n*Z,Et=gt-(gt-Z),yt=Z-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,b[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,b[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,b[2]=Ct-(jt-wt)+(xt-wt),b[3]=jt,lt=-Nt,dt=-_,At=p*lt,gt=n*p,pt=gt-(gt-p),Mt=p-pt,gt=n*lt,Et=gt-(gt-lt),yt=lt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=kt*dt,gt=n*kt,pt=gt-(gt-kt),Mt=kt-pt,gt=n*dt,Et=gt-(gt-dt),yt=dt-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,I[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,I[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,I[2]=Ct-(jt-wt)+(xt-wt),I[3]=jt,ct=i(4,b,4,I,S),At=Y*Z,gt=n*Y,pt=gt-(gt-Y),Mt=Y-pt,gt=n*Z,Et=gt-(gt-Z),yt=Z-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=p*_,gt=n*p,pt=gt-(gt-p),Mt=p-pt,gt=n*_,Et=gt-(gt-_),yt=_-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,z[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,z[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,z[2]=Ct-(jt-wt)+(xt-wt),z[3]=jt,ut=4):(S[0]=0,ct=1,z[0]=0,ut=1),0!==W){const t=s(ct,S,W,J);g=X(g,i(s(rt,m,W,G),G,s(t,J,2*mt,K),K,P),P);const n=s(ut,z,W,B);g=X(g,e(s(n,B,2*mt,G),G,s(n,B,W,H),H,s(t,J,W,K),K,L,Q),Q),0!==_&&(g=X(g,s(s(4,v,W,B),B,_,G),G)),0!==Z&&(g=X(g,s(s(4,D,-W,B),B,Z,G),G))}if(0!==$){const t=s(ct,S,$,J);g=X(g,i(s(it,F,$,G),G,s(t,J,2*qt,K),K,P),P);const n=s(ut,z,$,B);g=X(g,e(s(n,B,2*qt,G),G,s(n,B,$,H),H,s(t,J,$,K),K,L,Q),Q)}}if(0!==Y||0!==_){if(0!==p||0!==Z||0!==W||0!==$?(At=p*qt,gt=n*p,pt=gt-(gt-p),Mt=p-pt,gt=n*qt,Et=gt-(gt-qt),yt=qt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=kt*$,gt=n*kt,pt=gt-(gt-kt),Mt=kt-pt,gt=n*$,Et=gt-(gt-$),yt=$-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,b[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,b[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,b[2]=Ct-(jt-wt)+(xt-wt),b[3]=jt,lt=-Ut,dt=-Z,At=W*lt,gt=n*W,pt=gt-(gt-W),Mt=W-pt,gt=n*lt,Et=gt-(gt-lt),yt=lt-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=mt*dt,gt=n*mt,pt=gt-(gt-mt),Mt=mt-pt,gt=n*dt,Et=gt-(gt-dt),yt=dt-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt+It,wt=xt-Dt,I[0]=Dt-(xt-wt)+(It-wt),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt+bt,wt=xt-vt,I[1]=vt-(xt-wt)+(bt-wt),jt=Ct+xt,wt=jt-Ct,I[2]=Ct-(jt-wt)+(xt-wt),I[3]=jt,ot=i(4,b,4,I,N),At=p*$,gt=n*p,pt=gt-(gt-p),Mt=p-pt,gt=n*$,Et=gt-(gt-$),yt=$-Et,Dt=Mt*yt-(At-pt*Et-Mt*Et-pt*yt),bt=W*Z,gt=n*W,pt=gt-(gt-W),Mt=W-pt,gt=n*Z,Et=gt-(gt-Z),yt=Z-Et,It=Mt*yt-(bt-pt*Et-Mt*Et-pt*yt),xt=Dt-It,wt=Dt-xt,T[0]=Dt-(xt+wt)+(wt-It),Ct=At+xt,wt=Ct-At,vt=At-(Ct-wt)+(xt-wt),xt=vt-bt,wt=vt-xt,T[1]=vt-(xt+wt)+(wt-bt),jt=Ct+xt,wt=jt-Ct,T[2]=Ct-(jt-wt)+(xt-wt),T[3]=jt,ft=4):(N[0]=0,ot=1,T[0]=0,ft=1),0!==Y){const t=s(ot,N,Y,J);g=X(g,i(s(et,U,Y,G),G,s(t,J,2*Ft,K),K,P),P);const n=s(ft,T,Y,B);g=X(g,e(s(n,B,2*Ft,G),G,s(n,B,Y,H),H,s(t,J,Y,K),K,L,Q),Q),0!==Z&&(g=X(g,s(s(4,A,Y,B),B,Z,G),G)),0!==$&&(g=X(g,s(s(4,v,-Y,B),B,$,G),G))}if(0!==_){const t=s(ot,N,_,J);g=X(g,i(s(st,q,_,G),G,s(t,J,2*Nt,K),K,P),P);const n=s(ft,T,_,B);g=X(g,e(s(n,B,2*Nt,G),G,s(n,B,_,H),H,s(t,J,_,K),K,L,Q),Q)}}return R[g-1]}(t,h,c,f,a,u,l,d,ct)}class Z{constructor(t,n){this.W=t,this.bs=n}add(t){const n=this.W,r=t/n|0,i=t%n;return this.bs[r]|=1<<i,this}delete(t){const n=this.W,r=t/n|0,i=t%n;return this.bs[r]&=~(1<<i),this}set(t,n){const r=this.W,i=t/r|0,e=1<<t%r;return this.bs[i]^=(-n^this.bs[i])&e,n}has(t){const n=this.W,r=t/n|0,i=t%n;return!!(this.bs[r]&1<<i)}forEach(t){const n=this.W,r=this.bs,i=r.length;for(let e=0;e<i;e++){let i=0;for(;r[e]&&i<n;)r[e]&1<<i&&t(e*n+i),i++}return this}}class $ extends Z{constructor(t){super(8,new Uint8Array(Math.ceil(t/8)).fill(0))}}function _(t){return t%3==2?t-2:t+1}function tt(t){return t%3==0?t+2:t-1}class nt{constructor(t,n){if(!(t&&"object"==typeof t&&t.triangles&&t.halfedges&&t.coords))throw new Error("Expected an object with Delaunator output");if(t.triangles.length%3||t.halfedges.length!==t.triangles.length||t.coords.length%2)throw new Error("Delaunator output appears inconsistent");if(t.triangles.length<3)throw new Error("No edges in triangulation");this.del=t;const r=2**32-1,i=t.coords.length>>1,e=t.triangles.length;this.t=new Uint32Array(i).fill(r),this.i=new $(e),this.o=new $(e);for(let n=0;n<e;n++){const i=t.triangles[n];this.t[i]===r&&this.h(n)}n&&this.constrainAll(n)}constrainOne(t,n){const{triangles:r,halfedges:i}=this.del,e=this.t,s=this.o,o=e[t];let h=o;do{const e=r[h],s=_(h);if(e===n)return this.u(h);const o=tt(h),c=r[o];if(c===n)return this.u(s),s;if(this.intersectSegments(t,n,c,e)){h=o;break}h=i[s]}while(-1!==h&&h!==o);let c=h,f=-1;for(;-1!==h;){const e=i[h],o=tt(h),a=tt(e),u=_(e);if(-1===e)throw new Error("Constraining edge exited the hull");if(s.has(h))throw new Error("Edge intersects already constrained edge");if(this.isCollinear(t,n,r[h])||this.isCollinear(t,n,r[e]))throw new Error("Constraining edge intersects point");if(this.intersectSegments(r[h],r[e],r[o],r[a])){if(this.l(h),this.intersectSegments(t,n,r[o],r[a])&&(-1===f&&(f=o),f===o))throw new Error("Infinite loop: flipped diagonal still intersects");r[a]===n?(c=a,h=f,f=-1):this.intersectSegments(t,n,r[u],r[a])&&(h=u)}else{if(-1===f&&(f=h),r[a]===n){if(h===f)throw new Error("Infinite loop: non-convex quadrilateral");h=f,f=-1;continue}if(this.intersectSegments(t,n,r[a],r[e]))h=a;else if(this.intersectSegments(t,n,r[u],r[a]))h=u;else if(f===h)throw new Error("Infinite loop: no further intersect after non-convex")}}const a=this.i;this.u(c);do{var u=0;a.forEach((t=>{a.delete(t);const n=i[t];-1!==n&&(a.delete(n),this.p(t)||(this.l(t),u++))}))}while(u>0);return this.findEdge(t,n)}delaunify(t=!1){const n=this.del.halfedges,r=this.i,i=this.o,e=n.length;do{var s=0;for(let t=0;t<e;t++){if(i.has(t))continue;r.delete(t);const e=n[t];-1!==e&&(r.delete(e),this.p(t)||(this.l(t),s++))}}while(t&&s>0);return this}constrainAll(t){const n=t.length;for(let r=0;r<n;r++){const n=t[r];this.constrainOne(n[0],n[1])}return this}isConstrained(t){return this.o.has(t)}findEdge(t,n){const r=this.t[n],{triangles:i,halfedges:e}=this.del;let s=r,o=-1;do{if(i[s]===t)return s;o=_(s),s=e[o]}while(-1!==s&&s!==r);return i[_(o)]===t?-o:1/0}u(t){const n=this.del.halfedges[t],r=this.i,i=this.o;return r.delete(t),i.add(t),-1!==n?(r.delete(n),i.add(n),n):-t}M(t){const n=this.del.halfedges,r=this.i;if(this.o.has(t))return!1;const i=n[t];return-1!==i&&(r.add(t),r.add(i)),!0}l(t){const{triangles:n,halfedges:r}=this.del,i=this.i,e=this.o,s=r[t],o=tt(t),h=_(t),c=tt(s),f=_(s),a=r[o],u=r[c];if(e.has(t))throw new Error("Trying to flip a constrained edge");return n[t]=n[c],r[t]=u,i.set(t,i.has(c))||e.set(t,e.has(c)),-1!==u&&(r[u]=t),r[o]=c,n[s]=n[o],r[s]=a,i.set(s,i.has(o))||e.set(s,e.has(o)),-1!==a&&(r[a]=s),r[c]=o,this.M(t),this.M(h),this.M(s),this.M(f),i.add(o),e.delete(o),i.add(c),e.delete(c),this.h(t),this.h(h),this.h(s),this.h(f),o}p(t){const{triangles:n,halfedges:r}=this.del,i=r[t];if(-1===i)return!0;const e=n[tt(t)],s=n[t],o=n[_(t)],h=n[tt(i)];return!this.inCircle(e,s,o,h)}h(t){const{triangles:n,halfedges:r}=this.del,i=this.t,e=n[t];let s=tt(t),o=r[s];for(;-1!==o&&o!==t;)s=tt(o),o=r[s];return i[e]=s,s}intersectSegments(t,n,r,i){const e=this.del.coords;return t!==r&&t!==i&&n!==r&&n!==i&&rt(e[2*t],e[2*t+1],e[2*n],e[2*n+1],e[2*r],e[2*r+1],e[2*i],e[2*i+1])}inCircle(t,n,r,i){const e=this.del.coords;return Y(e[2*t],e[2*t+1],e[2*n],e[2*n+1],e[2*r],e[2*r+1],e[2*i],e[2*i+1])<0}isCollinear(t,n,r){const i=this.del.coords;return 0===p(i[2*t],i[2*t+1],i[2*n],i[2*n+1],i[2*r],i[2*r+1])}}function rt(t,n,r,i,e,s,o,h){const c=p(t,n,e,s,o,h),f=p(r,i,e,s,o,h);if(c>0&&f>0||c<0&&f<0)return!1;const a=p(e,s,t,n,r,i),u=p(o,h,t,n,r,i);return!(a>0&&u>0||a<0&&u<0)&&(0!==c||0!==f||0!==a||0!==u||!(Math.max(e,o)<Math.min(t,r)||Math.max(t,r)<Math.min(e,o)||Math.max(s,h)<Math.min(n,i)||Math.max(n,i)<Math.min(s,h)))}nt.intersectSegments=rt;export{nt as default};