UNPKG

@kninnug/constrainautor

Version:

A small library for constraining a Delaunator triangulation

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