UNPKG

@kninnug/constrainautor

Version:

A small library for constraining a Delaunator triangulation

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