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