@maplat/edgeruler
Version:
A small library for dual-constraining a Delaunator triangulation
2 lines (1 loc) • 16 kB
JavaScript
(function(Wt,et){typeof exports=="object"&&typeof module<"u"?et(exports):typeof define=="function"&&define.amd?define(["exports"],et):(Wt=typeof globalThis<"u"?globalThis:Wt||self,et(Wt.maplat_edgeruler={}))})(this,function(Wt){"use strict";const et=11102230246251565e-32,_=134217729,Ht=(3+8*et)*et;function st(I,o,f,l,m){let h,r,p,S,a=o[0],d=l[0],s=0,c=0;d>a==d>-a?(h=a,a=o[++s]):(h=d,d=l[++c]);let g=0;if(s<I&&c<f)for(d>a==d>-a?(r=a+h,p=h-(r-a),a=o[++s]):(r=d+h,p=h-(r-d),d=l[++c]),h=r,p!==0&&(m[g++]=p);s<I&&c<f;)d>a==d>-a?(r=h+a,S=r-h,p=h-(r-S)+(a-S),a=o[++s]):(r=h+d,S=r-h,p=h-(r-S)+(d-S),d=l[++c]),h=r,p!==0&&(m[g++]=p);for(;s<I;)r=h+a,S=r-h,p=h-(r-S)+(a-S),a=o[++s],h=r,p!==0&&(m[g++]=p);for(;c<f;)r=h+d,S=r-h,p=h-(r-S)+(d-S),d=l[++c],h=r,p!==0&&(m[g++]=p);return(h!==0||g===0)&&(m[g++]=h),g}function bt(I,o,f,l,m,h,r,p){return st(st(I,o,f,l,r),r,m,h,p)}function u(I,o,f,l){let m,h,r,p,S,a,d,s,c,g,j;d=_*f,g=d-(d-f),j=f-g;let v=o[0];m=v*f,d=_*v,s=d-(d-v),c=v-s,r=c*j-(m-s*g-c*g-s*j);let Q=0;r!==0&&(l[Q++]=r);for(let V=1;V<I;V++)v=o[V],p=v*f,d=_*v,s=d-(d-v),c=v-s,S=c*j-(p-s*g-c*g-s*j),h=m+S,a=h-m,r=m-(h-a)+(S-a),r!==0&&(l[Q++]=r),m=p+h,r=h-(m-p),r!==0&&(l[Q++]=r);return(m!==0||Q===0)&&(l[Q++]=m),Q}function Jt(I,o){let f=o[0];for(let l=1;l<I;l++)f+=o[l];return f}function q(I){return new Float64Array(I)}const xt=(3+16*et)*et,Pt=(2+12*et)*et,tn=(9+64*et)*et*et,Bt=q(4),Kt=q(8),Rt=q(12),Xt=q(16),ft=q(4);function nn(I,o,f,l,m,h,r){let p,S,a,d,s,c,g,j,v,Q,V,G,x,K,P,Y,nt,Z;const ot=I-m,lt=f-m,at=o-h,tt=l-h;K=ot*tt,c=_*ot,g=c-(c-ot),j=ot-g,c=_*tt,v=c-(c-tt),Q=tt-v,P=j*Q-(K-g*v-j*v-g*Q),Y=at*lt,c=_*at,g=c-(c-at),j=at-g,c=_*lt,v=c-(c-lt),Q=lt-v,nt=j*Q-(Y-g*v-j*v-g*Q),V=P-nt,s=P-V,Bt[0]=P-(V+s)+(s-nt),G=K+V,s=G-K,x=K-(G-s)+(V-s),V=x-Y,s=x-V,Bt[1]=x-(V+s)+(s-Y),Z=G+V,s=Z-G,Bt[2]=G-(Z-s)+(V-s),Bt[3]=Z;let it=Jt(4,Bt),t=Pt*r;if(it>=t||-it>=t||(s=I-ot,p=I-(ot+s)+(s-m),s=f-lt,a=f-(lt+s)+(s-m),s=o-at,S=o-(at+s)+(s-h),s=l-tt,d=l-(tt+s)+(s-h),p===0&&S===0&&a===0&&d===0)||(t=tn*r+Ht*Math.abs(it),it+=ot*d+tt*p-(at*a+lt*S),it>=t||-it>=t))return it;K=p*tt,c=_*p,g=c-(c-p),j=p-g,c=_*tt,v=c-(c-tt),Q=tt-v,P=j*Q-(K-g*v-j*v-g*Q),Y=S*lt,c=_*S,g=c-(c-S),j=S-g,c=_*lt,v=c-(c-lt),Q=lt-v,nt=j*Q-(Y-g*v-j*v-g*Q),V=P-nt,s=P-V,ft[0]=P-(V+s)+(s-nt),G=K+V,s=G-K,x=K-(G-s)+(V-s),V=x-Y,s=x-V,ft[1]=x-(V+s)+(s-Y),Z=G+V,s=Z-G,ft[2]=G-(Z-s)+(V-s),ft[3]=Z;const n=st(4,Bt,4,ft,Kt);K=ot*d,c=_*ot,g=c-(c-ot),j=ot-g,c=_*d,v=c-(c-d),Q=d-v,P=j*Q-(K-g*v-j*v-g*Q),Y=at*a,c=_*at,g=c-(c-at),j=at-g,c=_*a,v=c-(c-a),Q=a-v,nt=j*Q-(Y-g*v-j*v-g*Q),V=P-nt,s=P-V,ft[0]=P-(V+s)+(s-nt),G=K+V,s=G-K,x=K-(G-s)+(V-s),V=x-Y,s=x-V,ft[1]=x-(V+s)+(s-Y),Z=G+V,s=Z-G,ft[2]=G-(Z-s)+(V-s),ft[3]=Z;const i=st(n,Kt,4,ft,Rt);K=p*d,c=_*p,g=c-(c-p),j=p-g,c=_*d,v=c-(c-d),Q=d-v,P=j*Q-(K-g*v-j*v-g*Q),Y=S*a,c=_*S,g=c-(c-S),j=S-g,c=_*a,v=c-(c-a),Q=a-v,nt=j*Q-(Y-g*v-j*v-g*Q),V=P-nt,s=P-V,ft[0]=P-(V+s)+(s-nt),G=K+V,s=G-K,x=K-(G-s)+(V-s),V=x-Y,s=x-V,ft[1]=x-(V+s)+(s-Y),Z=G+V,s=Z-G,ft[2]=G-(Z-s)+(V-s),ft[3]=Z;const b=st(i,Rt,4,ft,Xt);return Xt[b-1]}function Ft(I,o,f,l,m,h){const r=(o-h)*(f-m),p=(I-m)*(l-h),S=r-p,a=Math.abs(r+p);return Math.abs(S)>=xt*a?S:-nn(I,o,f,l,m,h,a)}const en=(10+96*et)*et,sn=(4+48*et)*et,on=(44+576*et)*et*et,vt=q(4),Et=q(4),jt=q(4),wt=q(4),mt=q(4),gt=q(4),ht=q(4),ut=q(4),Ut=q(8),yt=q(8),Nt=q(8),qt=q(8),Lt=q(8),$t=q(8),It=q(8),Tt=q(8),Qt=q(8),Ct=q(4),St=q(4),Dt=q(4),C=q(8),F=q(16),H=q(16),J=q(16),L=q(32),_t=q(32),R=q(48),dt=q(64);let kt=q(1152),zt=q(1152);function X(I,o,f){I=st(I,kt,o,f,zt);const l=kt;return kt=zt,zt=l,I}function rn(I,o,f,l,m,h,r,p,S){let a,d,s,c,g,j,v,Q,V,G,x,K,P,Y,nt,Z,ot,lt,at,tt,it,t,n,i,b,w,W,e,M,D,E,A,B,T,k;const O=I-r,U=f-r,y=m-r,$=o-p,N=l-p,z=h-p;E=U*z,n=_*U,i=n-(n-U),b=U-i,n=_*z,w=n-(n-z),W=z-w,A=b*W-(E-i*w-b*w-i*W),B=y*N,n=_*y,i=n-(n-y),b=y-i,n=_*N,w=n-(n-N),W=N-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,vt[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,vt[1]=D-(e+t)+(t-B),k=M+e,t=k-M,vt[2]=M-(k-t)+(e-t),vt[3]=k,E=y*$,n=_*y,i=n-(n-y),b=y-i,n=_*$,w=n-(n-$),W=$-w,A=b*W-(E-i*w-b*w-i*W),B=O*z,n=_*O,i=n-(n-O),b=O-i,n=_*z,w=n-(n-z),W=z-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,Et[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,Et[1]=D-(e+t)+(t-B),k=M+e,t=k-M,Et[2]=M-(k-t)+(e-t),Et[3]=k,E=O*N,n=_*O,i=n-(n-O),b=O-i,n=_*N,w=n-(n-N),W=N-w,A=b*W-(E-i*w-b*w-i*W),B=U*$,n=_*U,i=n-(n-U),b=U-i,n=_*$,w=n-(n-$),W=$-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,jt[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,jt[1]=D-(e+t)+(t-B),k=M+e,t=k-M,jt[2]=M-(k-t)+(e-t),jt[3]=k,a=st(st(st(u(u(4,vt,O,C),C,O,F),F,u(u(4,vt,$,C),C,$,H),H,L),L,st(u(u(4,Et,U,C),C,U,F),F,u(u(4,Et,N,C),C,N,H),H,_t),_t,dt),dt,st(u(u(4,jt,y,C),C,y,F),F,u(u(4,jt,z,C),C,z,H),H,L),L,kt);let pt=Jt(a,kt),Vt=sn*S;if(pt>=Vt||-pt>=Vt||(t=I-O,d=I-(O+t)+(t-r),t=o-$,g=o-($+t)+(t-p),t=f-U,s=f-(U+t)+(t-r),t=l-N,j=l-(N+t)+(t-p),t=m-y,c=m-(y+t)+(t-r),t=h-z,v=h-(z+t)+(t-p),d===0&&s===0&&c===0&&g===0&&j===0&&v===0)||(Vt=on*S+Ht*Math.abs(pt),pt+=(O*O+$*$)*(U*v+z*s-(N*c+y*j))+2*(O*d+$*g)*(U*z-N*y)+((U*U+N*N)*(y*g+$*c-(z*d+O*v))+2*(U*s+N*j)*(y*$-z*O))+((y*y+z*z)*(O*j+N*d-($*s+U*g))+2*(y*c+z*v)*(O*N-$*U)),pt>=Vt||-pt>=Vt))return pt;if((s!==0||j!==0||c!==0||v!==0)&&(E=O*O,n=_*O,i=n-(n-O),b=O-i,A=b*b-(E-i*i-(i+i)*b),B=$*$,n=_*$,i=n-(n-$),b=$-i,T=b*b-(B-i*i-(i+i)*b),e=A+T,t=e-A,wt[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,wt[1]=D-(e-t)+(B-t),k=M+e,t=k-M,wt[2]=M-(k-t)+(e-t),wt[3]=k),(c!==0||v!==0||d!==0||g!==0)&&(E=U*U,n=_*U,i=n-(n-U),b=U-i,A=b*b-(E-i*i-(i+i)*b),B=N*N,n=_*N,i=n-(n-N),b=N-i,T=b*b-(B-i*i-(i+i)*b),e=A+T,t=e-A,mt[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,mt[1]=D-(e-t)+(B-t),k=M+e,t=k-M,mt[2]=M-(k-t)+(e-t),mt[3]=k),(d!==0||g!==0||s!==0||j!==0)&&(E=y*y,n=_*y,i=n-(n-y),b=y-i,A=b*b-(E-i*i-(i+i)*b),B=z*z,n=_*z,i=n-(n-z),b=z-i,T=b*b-(B-i*i-(i+i)*b),e=A+T,t=e-A,gt[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,gt[1]=D-(e-t)+(B-t),k=M+e,t=k-M,gt[2]=M-(k-t)+(e-t),gt[3]=k),d!==0&&(Q=u(4,vt,d,Ut),a=X(a,bt(u(Q,Ut,2*O,F),F,u(u(4,gt,d,C),C,N,H),H,u(u(4,mt,d,C),C,-z,J),J,L,R),R)),g!==0&&(V=u(4,vt,g,yt),a=X(a,bt(u(V,yt,2*$,F),F,u(u(4,mt,g,C),C,y,H),H,u(u(4,gt,g,C),C,-U,J),J,L,R),R)),s!==0&&(G=u(4,Et,s,Nt),a=X(a,bt(u(G,Nt,2*U,F),F,u(u(4,wt,s,C),C,z,H),H,u(u(4,gt,s,C),C,-$,J),J,L,R),R)),j!==0&&(x=u(4,Et,j,qt),a=X(a,bt(u(x,qt,2*N,F),F,u(u(4,gt,j,C),C,O,H),H,u(u(4,wt,j,C),C,-y,J),J,L,R),R)),c!==0&&(K=u(4,jt,c,Lt),a=X(a,bt(u(K,Lt,2*y,F),F,u(u(4,mt,c,C),C,$,H),H,u(u(4,wt,c,C),C,-N,J),J,L,R),R)),v!==0&&(P=u(4,jt,v,$t),a=X(a,bt(u(P,$t,2*z,F),F,u(u(4,wt,v,C),C,U,H),H,u(u(4,mt,v,C),C,-O,J),J,L,R),R)),d!==0||g!==0){if(s!==0||j!==0||c!==0||v!==0?(E=s*z,n=_*s,i=n-(n-s),b=s-i,n=_*z,w=n-(n-z),W=z-w,A=b*W-(E-i*w-b*w-i*W),B=U*v,n=_*U,i=n-(n-U),b=U-i,n=_*v,w=n-(n-v),W=v-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ht[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ht[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ht[2]=M-(k-t)+(e-t),ht[3]=k,E=c*-N,n=_*c,i=n-(n-c),b=c-i,n=_*-N,w=n-(n- -N),W=-N-w,A=b*W-(E-i*w-b*w-i*W),B=y*-j,n=_*y,i=n-(n-y),b=y-i,n=_*-j,w=n-(n- -j),W=-j-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ut[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ut[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ut[2]=M-(k-t)+(e-t),ut[3]=k,nt=st(4,ht,4,ut,Tt),E=s*v,n=_*s,i=n-(n-s),b=s-i,n=_*v,w=n-(n-v),W=v-w,A=b*W-(E-i*w-b*w-i*W),B=c*j,n=_*c,i=n-(n-c),b=c-i,n=_*j,w=n-(n-j),W=j-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,St[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,St[1]=D-(e+t)+(t-B),k=M+e,t=k-M,St[2]=M-(k-t)+(e-t),St[3]=k,lt=4):(Tt[0]=0,nt=1,St[0]=0,lt=1),d!==0){const rt=u(nt,Tt,d,J);a=X(a,st(u(Q,Ut,d,F),F,u(rt,J,2*O,L),L,R),R);const ct=u(lt,St,d,C);a=X(a,bt(u(ct,C,2*O,F),F,u(ct,C,d,H),H,u(rt,J,d,L),L,_t,dt),dt),j!==0&&(a=X(a,u(u(4,gt,d,C),C,j,F),F)),v!==0&&(a=X(a,u(u(4,mt,-d,C),C,v,F),F))}if(g!==0){const rt=u(nt,Tt,g,J);a=X(a,st(u(V,yt,g,F),F,u(rt,J,2*$,L),L,R),R);const ct=u(lt,St,g,C);a=X(a,bt(u(ct,C,2*$,F),F,u(ct,C,g,H),H,u(rt,J,g,L),L,_t,dt),dt)}}if(s!==0||j!==0){if(c!==0||v!==0||d!==0||g!==0?(E=c*$,n=_*c,i=n-(n-c),b=c-i,n=_*$,w=n-(n-$),W=$-w,A=b*W-(E-i*w-b*w-i*W),B=y*g,n=_*y,i=n-(n-y),b=y-i,n=_*g,w=n-(n-g),W=g-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ht[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ht[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ht[2]=M-(k-t)+(e-t),ht[3]=k,tt=-z,it=-v,E=d*tt,n=_*d,i=n-(n-d),b=d-i,n=_*tt,w=n-(n-tt),W=tt-w,A=b*W-(E-i*w-b*w-i*W),B=O*it,n=_*O,i=n-(n-O),b=O-i,n=_*it,w=n-(n-it),W=it-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ut[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ut[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ut[2]=M-(k-t)+(e-t),ut[3]=k,Z=st(4,ht,4,ut,Qt),E=c*g,n=_*c,i=n-(n-c),b=c-i,n=_*g,w=n-(n-g),W=g-w,A=b*W-(E-i*w-b*w-i*W),B=d*v,n=_*d,i=n-(n-d),b=d-i,n=_*v,w=n-(n-v),W=v-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,Dt[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,Dt[1]=D-(e+t)+(t-B),k=M+e,t=k-M,Dt[2]=M-(k-t)+(e-t),Dt[3]=k,at=4):(Qt[0]=0,Z=1,Dt[0]=0,at=1),s!==0){const rt=u(Z,Qt,s,J);a=X(a,st(u(G,Nt,s,F),F,u(rt,J,2*U,L),L,R),R);const ct=u(at,Dt,s,C);a=X(a,bt(u(ct,C,2*U,F),F,u(ct,C,s,H),H,u(rt,J,s,L),L,_t,dt),dt),v!==0&&(a=X(a,u(u(4,wt,s,C),C,v,F),F)),g!==0&&(a=X(a,u(u(4,gt,-s,C),C,g,F),F))}if(j!==0){const rt=u(Z,Qt,j,J);a=X(a,st(u(x,qt,j,F),F,u(rt,J,2*N,L),L,R),R);const ct=u(at,Dt,j,C);a=X(a,bt(u(ct,C,2*N,F),F,u(ct,C,j,H),H,u(rt,J,j,L),L,_t,dt),dt)}}if(c!==0||v!==0){if(d!==0||g!==0||s!==0||j!==0?(E=d*N,n=_*d,i=n-(n-d),b=d-i,n=_*N,w=n-(n-N),W=N-w,A=b*W-(E-i*w-b*w-i*W),B=O*j,n=_*O,i=n-(n-O),b=O-i,n=_*j,w=n-(n-j),W=j-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ht[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ht[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ht[2]=M-(k-t)+(e-t),ht[3]=k,tt=-$,it=-g,E=s*tt,n=_*s,i=n-(n-s),b=s-i,n=_*tt,w=n-(n-tt),W=tt-w,A=b*W-(E-i*w-b*w-i*W),B=U*it,n=_*U,i=n-(n-U),b=U-i,n=_*it,w=n-(n-it),W=it-w,T=b*W-(B-i*w-b*w-i*W),e=A+T,t=e-A,ut[0]=A-(e-t)+(T-t),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D+B,t=e-D,ut[1]=D-(e-t)+(B-t),k=M+e,t=k-M,ut[2]=M-(k-t)+(e-t),ut[3]=k,Y=st(4,ht,4,ut,It),E=d*j,n=_*d,i=n-(n-d),b=d-i,n=_*j,w=n-(n-j),W=j-w,A=b*W-(E-i*w-b*w-i*W),B=s*g,n=_*s,i=n-(n-s),b=s-i,n=_*g,w=n-(n-g),W=g-w,T=b*W-(B-i*w-b*w-i*W),e=A-T,t=A-e,Ct[0]=A-(e+t)+(t-T),M=E+e,t=M-E,D=E-(M-t)+(e-t),e=D-B,t=D-e,Ct[1]=D-(e+t)+(t-B),k=M+e,t=k-M,Ct[2]=M-(k-t)+(e-t),Ct[3]=k,ot=4):(It[0]=0,Y=1,Ct[0]=0,ot=1),c!==0){const rt=u(Y,It,c,J);a=X(a,st(u(K,Lt,c,F),F,u(rt,J,2*y,L),L,R),R);const ct=u(ot,Ct,c,C);a=X(a,bt(u(ct,C,2*y,F),F,u(ct,C,c,H),H,u(rt,J,c,L),L,_t,dt),dt),g!==0&&(a=X(a,u(u(4,mt,c,C),C,g,F),F)),j!==0&&(a=X(a,u(u(4,wt,-c,C),C,j,F),F))}if(v!==0){const rt=u(Y,It,v,J);a=X(a,st(u(P,$t,v,F),F,u(rt,J,2*z,L),L,R),R);const ct=u(ot,Ct,v,C);a=X(a,bt(u(ct,C,2*z,F),F,u(ct,C,v,H),H,u(rt,J,v,L),L,_t,dt),dt)}}return kt[a-1]}function cn(I,o,f,l,m,h,r,p){const S=I-r,a=f-r,d=m-r,s=o-p,c=l-p,g=h-p,j=a*g,v=d*c,Q=S*S+s*s,V=d*s,G=S*g,x=a*a+c*c,K=S*c,P=a*s,Y=d*d+g*g,nt=Q*(j-v)+x*(V-G)+Y*(K-P),Z=(Math.abs(j)+Math.abs(v))*Q+(Math.abs(V)+Math.abs(G))*x+(Math.abs(K)+Math.abs(P))*Y,ot=en*Z;return nt>ot||-nt>ot?nt:rn(I,o,f,l,m,h,r,p,Z)}class ln{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 Yt extends ln{constructor(o){const l=new Uint8Array(Math.ceil(o/8)).fill(0);super(8,l)}}function At(I){return I%3===2?I-2:I+1}function Mt(I){return I%3===0?I+2:I-1}function Zt(I,o,f,l,m,h,r,p){const S=Ft(I,o,m,h,r,p),a=Ft(f,l,m,h,r,p);if(S>0&&a>0||S<0&&a<0)return!1;const d=Ft(m,h,I,o,f,l),s=Ft(r,p,I,o,f,l);return d>0&&s>0||d<0&&s<0?!1:S===0&&a===0&&d===0&&s===0?!(Math.max(m,r)<Math.min(I,f)||Math.max(I,f)<Math.min(m,r)||Math.max(h,p)<Math.min(o,l)||Math.max(o,l)<Math.min(h,p)):!0}class an{constructor(o){this.del=o}}const Gt=class Gt extends an{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 Yt(h),this.consd=new Yt(h);for(let r=0;r<h;r++){const p=o.triangles[r];this.vertMap[p]===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=At(r);if(a===f)return this.protect(r);const s=Mt(r),c=l[s];if(c===f)return this.protect(d),d;if(this.intersectSegments(o,f,c,a)){r=s;break}r=m[d]}while(r!==-1&&r!==h);let p=r,S=-1;for(;r!==-1;){const a=m[r],d=Mt(r),s=Mt(a),c=At(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[s])){if(S===-1&&(S=r),l[s]===f){if(r===S)throw new Error("Infinite loop: non-convex quadrilateral");r=S,S=-1;continue}if(this.intersectSegments(o,f,l[s],l[a]))r=s;else if(this.intersectSegments(o,f,l[c],l[s]))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[s])&&(S===-1&&(S=d),S===d))throw new Error("Infinite loop: flipped diagonal still intersects");l[s]===f?(p=s,r=S,S=-1):this.intersectSegments(o,f,l[c],l[s])&&(r=c)}return this.protect(p),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 p=0;p<h;p++){if(m.has(p))continue;l.delete(p);const S=f[p];S!==-1&&(l.delete(S),this.isDelaunay(p)||(this.flipDiagonal(p),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,p=-1;do{if(m[r]===o)return r;p=At(r),r=h[p]}while(r!==-1&&r!==l);return m[At(p)]===o?-p: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],p=Mt(o),S=At(o),a=Mt(r),d=At(r),s=l[p],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[p]=a,f[r]=f[p],l[r]=s,m.set(r,m.has(p))||h.set(r,h.has(p)),s!==-1&&(l[s]=r),l[a]=p,this.markFlip(o),this.markFlip(S),this.markFlip(r),this.markFlip(d),m.add(p),h.delete(p),m.add(a),h.delete(a),this.updateVert(o),this.updateVert(S),this.updateVert(r),this.updateVert(d),p}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 cn(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[Mt(o)],r=f[o],p=f[At(o)],S=f[Mt(m)];return!this.inCircle(h,r,p,S)}updateVert(o){const{triangles:f,halfedges:l}=this.del,m=this.vertMap,h=f[o];let r=Mt(o),p=l[r];for(;p!==-1&&p!==o;)r=Mt(p),p=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:Zt(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])}};Gt.intersectSegments=Zt;let Ot=Gt;Wt.Constrain=Ot,Wt.default=Ot,Object.defineProperties(Wt,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});