UNPKG

@kninnug/constrainautor

Version:

A small library for constraining a Delaunator triangulation

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