1 line
7.7 KiB
JavaScript
1 line
7.7 KiB
JavaScript
!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):(t="undefined"!=typeof globalThis?globalThis:t||self).Delaunator=s()}(this,function(){"use strict";const t=11102230246251565e-32,s=134217729,i=(3+8*t)*t;function e(t,s,i,e,n){let h,r,l,o,a=s[0],f=e[0],c=0,u=0;f>a==f>-a?(h=a,a=s[++c]):(h=f,f=e[++u]);let _=0;if(c<t&&u<i)for(f>a==f>-a?(r=a+h,l=h-(r-a),a=s[++c]):(r=f+h,l=h-(r-f),f=e[++u]),h=r,0!==l&&(n[_++]=l);c<t&&u<i;)f>a==f>-a?(r=h+a,o=r-h,l=h-(r-o)+(a-o),a=s[++c]):(r=h+f,o=r-h,l=h-(r-o)+(f-o),f=e[++u]),h=r,0!==l&&(n[_++]=l);for(;c<t;)r=h+a,o=r-h,l=h-(r-o)+(a-o),a=s[++c],h=r,0!==l&&(n[_++]=l);for(;u<i;)r=h+f,o=r-h,l=h-(r-o)+(f-o),f=e[++u],h=r,0!==l&&(n[_++]=l);return 0===h&&0!==_||(n[_++]=h),_}function n(t){return new Float64Array(t)}const h=n(4),r=n(8),l=n(12),o=n(16),a=n(4);function f(t,n,f,c,u,_){const d=(n-_)*(f-u),g=(t-u)*(c-_),y=d-g,w=Math.abs(d+g);return Math.abs(y)>=33306690738754716e-32*w?y:-function(t,n,f,c,u,_,d){let g,y,w,b,A,k,x,M,S,p,T,z,U,m,K,L,v,F;const I=t-u,P=f-u,E=n-_,H=c-_;m=I*H,k=s*I,x=k-(k-I),M=I-x,k=s*H,S=k-(k-H),p=H-S,K=M*p-(m-x*S-M*S-x*p),L=E*P,k=s*E,x=k-(k-E),M=E-x,k=s*P,S=k-(k-P),p=P-S,v=M*p-(L-x*S-M*S-x*p),T=K-v,A=K-T,h[0]=K-(T+A)+(A-v),z=m+T,A=z-m,U=m-(z-A)+(T-A),T=U-L,A=U-T,h[1]=U-(T+A)+(A-L),F=z+T,A=F-z,h[2]=z-(F-A)+(T-A),h[3]=F;let N=function(t,s){let i=s[0];for(let e=1;e<t;e++)i+=s[e];return i}(4,h),j=22204460492503146e-32*d;if(N>=j||-N>=j)return N;if(A=t-I,g=t-(I+A)+(A-u),A=f-P,w=f-(P+A)+(A-u),A=n-E,y=n-(E+A)+(A-_),A=c-H,b=c-(H+A)+(A-_),0===g&&0===y&&0===w&&0===b)return N;if(j=11093356479670487e-47*d+i*Math.abs(N),N+=I*b+H*g-(E*w+P*y),N>=j||-N>=j)return N;m=g*H,k=s*g,x=k-(k-g),M=g-x,k=s*H,S=k-(k-H),p=H-S,K=M*p-(m-x*S-M*S-x*p),L=y*P,k=s*y,x=k-(k-y),M=y-x,k=s*P,S=k-(k-P),p=P-S,v=M*p-(L-x*S-M*S-x*p),T=K-v,A=K-T,a[0]=K-(T+A)+(A-v),z=m+T,A=z-m,U=m-(z-A)+(T-A),T=U-L,A=U-T,a[1]=U-(T+A)+(A-L),F=z+T,A=F-z,a[2]=z-(F-A)+(T-A),a[3]=F;const q=e(4,h,4,a,r);m=I*b,k=s*I,x=k-(k-I),M=I-x,k=s*b,S=k-(k-b),p=b-S,K=M*p-(m-x*S-M*S-x*p),L=E*w,k=s*E,x=k-(k-E),M=E-x,k=s*w,S=k-(k-w),p=w-S,v=M*p-(L-x*S-M*S-x*p),T=K-v,A=K-T,a[0]=K-(T+A)+(A-v),z=m+T,A=z-m,U=m-(z-A)+(T-A),T=U-L,A=U-T,a[1]=U-(T+A)+(A-L),F=z+T,A=F-z,a[2]=z-(F-A)+(T-A),a[3]=F;const D=e(q,r,4,a,l);m=g*b,k=s*g,x=k-(k-g),M=g-x,k=s*b,S=k-(k-b),p=b-S,K=M*p-(m-x*S-M*S-x*p),L=y*w,k=s*y,x=k-(k-y),M=y-x,k=s*w,S=k-(k-w),p=w-S,v=M*p-(L-x*S-M*S-x*p),T=K-v,A=K-T,a[0]=K-(T+A)+(A-v),z=m+T,A=z-m,U=m-(z-A)+(T-A),T=U-L,A=U-T,a[1]=U-(T+A)+(A-L),F=z+T,A=F-z,a[2]=z-(F-A)+(T-A),a[3]=F;const B=e(D,l,4,a,o);return o[B-1]}(t,n,f,c,u,_,w)}const c=Math.pow(2,-52),u=new Uint32Array(512);class _{static from(t,s=A,i=k){const e=t.length,n=new Float64Array(2*e);for(let h=0;h<e;h++){const e=t[h];n[2*h]=s(e),n[2*h+1]=i(e)}return new _(n)}constructor(t){const s=t.length>>1;if(s>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const i=Math.max(2*s-5,0);this._triangles=new Uint32Array(3*i),this._halfedges=new Int32Array(3*i),this._hashSize=Math.ceil(Math.sqrt(s)),this._hullPrev=new Uint32Array(s),this._hullNext=new Uint32Array(s),this._hullTri=new Uint32Array(s),this._hullHash=new Int32Array(this._hashSize),this._ids=new Uint32Array(s),this._dists=new Float64Array(s),this.trianglesLen=0,this._cx=0,this._cy=0,this._hullStart=0,this.hull=this._triangles,this.triangles=this._triangles,this.halfedges=this._halfedges,this.update()}update(){const{coords:t,_hullPrev:s,_hullNext:i,_hullTri:e,_hullHash:n}=this,h=t.length>>1;let r=1/0,l=1/0,o=-1/0,a=-1/0;for(let s=0;s<h;s++){const i=t[2*s],e=t[2*s+1];i<r&&(r=i),e<l&&(l=e),i>o&&(o=i),e>a&&(a=e),this._ids[s]=s}const u=(r+o)/2,_=(l+a)/2;let g=0,b=0,A=0;for(let s=0,i=1/0;s<h;s++){const e=d(u,_,t[2*s],t[2*s+1]);e<i&&(g=s,i=e)}const k=t[2*g],x=t[2*g+1];for(let s=0,i=1/0;s<h;s++){if(s===g)continue;const e=d(k,x,t[2*s],t[2*s+1]);e<i&&e>0&&(b=s,i=e)}let M=t[2*b],S=t[2*b+1],p=1/0;for(let s=0;s<h;s++){if(s===g||s===b)continue;const i=y(k,x,M,S,t[2*s],t[2*s+1]);i<p&&(A=s,p=i)}let T=t[2*A],z=t[2*A+1];if(p===1/0){for(let s=0;s<h;s++)this._dists[s]=t[2*s]-t[0]||t[2*s+1]-t[1];w(this._ids,this._dists,0,h-1);const s=new Uint32Array(h);let i=0;for(let t=0,e=-1/0;t<h;t++){const n=this._ids[t],h=this._dists[n];h>e&&(s[i++]=n,e=h)}return this.hull=s.subarray(0,i),this.triangles=new Uint32Array(0),void(this.halfedges=new Int32Array(0))}if(f(k,x,M,S,T,z)<0){const t=b,s=M,i=S;b=A,M=T,S=z,A=t,T=s,z=i}const U=function(t,s,i,e,n,h){const r=i-t,l=e-s,o=n-t,a=h-s,f=r*r+l*l,c=o*o+a*a,u=.5/(r*a-l*o);return{x:t+(a*f-l*c)*u,y:s+(r*c-o*f)*u}}(k,x,M,S,T,z);this._cx=U.x,this._cy=U.y;for(let s=0;s<h;s++)this._dists[s]=d(t[2*s],t[2*s+1],U.x,U.y);w(this._ids,this._dists,0,h-1),this._hullStart=g;let m=3;i[g]=s[A]=b,i[b]=s[g]=A,i[A]=s[b]=g,e[g]=0,e[b]=1,e[A]=2,n.fill(-1),n[this._hashKey(k,x)]=g,n[this._hashKey(M,S)]=b,n[this._hashKey(T,z)]=A,this.trianglesLen=0,this._addTriangle(g,b,A,-1,-1,-1);for(let h=0,r=0,l=0;h<this._ids.length;h++){const o=this._ids[h],a=t[2*o],u=t[2*o+1];if(h>0&&Math.abs(a-r)<=c&&Math.abs(u-l)<=c)continue;if(r=a,l=u,o===g||o===b||o===A)continue;let _=0;for(let t=0,s=this._hashKey(a,u);t<this._hashSize&&(_=n[(s+t)%this._hashSize],-1===_||_===i[_]);t++);_=s[_];let d,y=_;for(;d=i[y],f(a,u,t[2*y],t[2*y+1],t[2*d],t[2*d+1])>=0;)if(y=d,y===_){y=-1;break}if(-1===y)continue;let w=this._addTriangle(y,o,i[y],-1,-1,e[y]);e[o]=this._legalize(w+2),e[y]=w,m++;let k=i[y];for(;d=i[k],f(a,u,t[2*k],t[2*k+1],t[2*d],t[2*d+1])<0;)w=this._addTriangle(k,o,d,e[o],-1,e[k]),e[o]=this._legalize(w+2),i[k]=k,m--,k=d;if(y===_)for(;d=s[y],f(a,u,t[2*d],t[2*d+1],t[2*y],t[2*y+1])<0;)w=this._addTriangle(d,o,y,-1,e[y],e[d]),this._legalize(w+2),e[d]=w,i[y]=y,m--,y=d;this._hullStart=s[o]=y,i[y]=s[k]=o,i[o]=k,n[this._hashKey(a,u)]=o,n[this._hashKey(t[2*y],t[2*y+1])]=y}this.hull=new Uint32Array(m);for(let t=0,s=this._hullStart;t<m;t++)this.hull[t]=s,s=i[s];this.triangles=this._triangles.subarray(0,this.trianglesLen),this.halfedges=this._halfedges.subarray(0,this.trianglesLen)}_hashKey(t,s){return Math.floor(function(t,s){const i=t/(Math.abs(t)+Math.abs(s));return(s>0?3-i:1+i)/4}(t-this._cx,s-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:s,_halfedges:i,coords:e}=this;let n=0,h=0;for(;;){const r=i[t],l=t-t%3;if(h=l+(t+2)%3,-1===r){if(0===n)break;t=u[--n];continue}const o=r-r%3,a=l+(t+1)%3,f=o+(r+2)%3,c=s[h],_=s[t],d=s[a],y=s[f];if(g(e[2*c],e[2*c+1],e[2*_],e[2*_+1],e[2*d],e[2*d+1],e[2*y],e[2*y+1])){s[t]=y,s[r]=c;const e=i[f];if(-1===e){let s=this._hullStart;do{if(this._hullTri[s]===f){this._hullTri[s]=t;break}s=this._hullPrev[s]}while(s!==this._hullStart)}this._link(t,e),this._link(r,i[h]),this._link(h,f);const l=o+(r+1)%3;n<u.length&&(u[n++]=l)}else{if(0===n)break;t=u[--n]}}return h}_link(t,s){this._halfedges[t]=s,-1!==s&&(this._halfedges[s]=t)}_addTriangle(t,s,i,e,n,h){const r=this.trianglesLen;return this._triangles[r]=t,this._triangles[r+1]=s,this._triangles[r+2]=i,this._link(r,e),this._link(r+1,n),this._link(r+2,h),this.trianglesLen+=3,r}}function d(t,s,i,e){const n=t-i,h=s-e;return n*n+h*h}function g(t,s,i,e,n,h,r,l){const o=t-r,a=s-l,f=i-r,c=e-l,u=n-r,_=h-l,d=f*f+c*c,g=u*u+_*_;return o*(c*g-d*_)-a*(f*g-d*u)+(o*o+a*a)*(f*_-c*u)<0}function y(t,s,i,e,n,h){const r=i-t,l=e-s,o=n-t,a=h-s,f=r*r+l*l,c=o*o+a*a,u=.5/(r*a-l*o),_=(a*f-l*c)*u,d=(r*c-o*f)*u;return _*_+d*d}function w(t,s,i,e){if(e-i<=20)for(let n=i+1;n<=e;n++){const e=t[n],h=s[e];let r=n-1;for(;r>=i&&s[t[r]]>h;)t[r+1]=t[r--];t[r+1]=e}else{let n=i+1,h=e;b(t,i+e>>1,n),s[t[i]]>s[t[e]]&&b(t,i,e),s[t[n]]>s[t[e]]&&b(t,n,e),s[t[i]]>s[t[n]]&&b(t,i,n);const r=t[n],l=s[r];for(;;){do{n++}while(s[t[n]]<l);do{h--}while(s[t[h]]>l);if(h<n)break;b(t,n,h)}t[i+1]=t[h],t[h]=r,e-n+1>=h-i?(w(t,s,n,e),w(t,s,i,h-1)):(w(t,s,i,h-1),w(t,s,n,e))}}function b(t,s,i){const e=t[s];t[s]=t[i],t[i]=e}function A(t){return t[0]}function k(t){return t[1]}return _});
|