1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-18 20:59:39 +02:00
Maybe/vendor/javascript/d3-contour.js

5 lines
6.3 KiB
JavaScript
Raw Normal View History

// d3-contour@4.0.2 downloaded from https://ga.jspm.io/npm:d3-contour@4.0.2/src/index.js
import{thresholdSturges as n,extent as t,ticks as r,nice as o,blur2 as i,max as e}from"d3-array";var a=Array.prototype;var s=a.slice;function ascending(n,t){return n-t}function area(n){var t=0,r=n.length,o=n[r-1][1]*n[0][0]-n[r-1][0]*n[0][1];while(++t<r)o+=n[t-1][1]*n[t][0]-n[t-1][0]*n[t][1];return o}var constant=n=>()=>n;function contains(n,t){var r,o=-1,i=t.length;while(++o<i)if(r=ringContains(n,t[o]))return r;return 0}function ringContains(n,t){var r=t[0],o=t[1],i=-1;for(var e=0,a=n.length,s=a-1;e<a;s=e++){var u=n[e],f=u[0],c=u[1],h=n[s],l=h[0],d=h[1];if(segmentContains(u,h,t))return 0;c>o!==d>o&&r<(l-f)*(o-c)/(d-c)+f&&(i=-i)}return i}function segmentContains(n,t,r){var o;return collinear(n,t,r)&&within(n[o=+(n[0]===t[0])],r[o],t[o])}function collinear(n,t,r){return(t[0]-n[0])*(r[1]-n[1])===(r[0]-n[0])*(t[1]-n[1])}function within(n,t,r){return n<=t&&t<=r||r<=t&&t<=n}function noop(){}var u=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Contours(){var i=1,e=1,a=n,f=smoothLinear;function contours(n){var i=a(n);if(Array.isArray(i))i=i.slice().sort(ascending);else{const e=t(n,finite);i=r(...o(e[0],e[1],i),i);while(i[i.length-1]>=e[1])i.pop();while(i[1]<e[0])i.shift()}return i.map((t=>contour(n,t)))}function contour(n,t){const r=null==t?NaN:+t;if(isNaN(r))throw new Error(`invalid value: ${t}`);var o=[],i=[];isorings(n,r,(function(t){f(t,n,r);area(t)>0?o.push([t]):i.push(t)}));i.forEach((function(n){for(var t,r=0,i=o.length;r<i;++r)if(-1!==contains((t=o[r])[0],n)){t.push(n);return}}));return{type:"MultiPolygon",value:t,coordinates:o}}function isorings(n,t,r){var o,a,s,f,c,h,l=new Array,d=new Array;o=a=-1;f=above(n[0],t);u[f<<1].forEach(stitch);while(++o<i-1){s=f,f=above(n[o+1],t);u[s|f<<1].forEach(stitch)}u[f<<0].forEach(stitch);while(++a<e-1){o=-1;f=above(n[a*i+i],t);c=above(n[a*i],t);u[f<<1|c<<2].forEach(stitch);while(++o<i-1){s=f,f=above(n[a*i+i+o+1],t);h=c,c=above(n[a*i+o+1],t);u[s|f<<1|c<<2|h<<3].forEach(stitch)}u[f|c<<3].forEach(stitch)}o=-1;c=n[a*i]>=t;u[c<<2].forEach(stitch);while(++o<i-1){h=c,c=above(n[a*i+o+1],t);u[c<<2|h<<3].forEach(stitch)}u[c<<3].forEach(stitch);function stitch(n){var t,i,e=[n[0][0]+o,n[0][1]+a],s=[n[1][0]+o,n[1][1]+a],u=index(e),f=index(s);if(t=d[u])if(i=l[f]){delete d[t.end];delete l[i.start];if(t===i){t.ring.push(s);r(t.ring)}else l[t.start]=d[i.end]={start:t.start,end:i.end,ring:t.ring.concat(i.ring)}}else{delete d[t.end];t.ring.push(s);d[t.end=f]=t}else if(t=l[f])if(i=d[u]){delete l[t.start];delete d[i.end];if(t===i){t.ring.push(s);r(t.ring)}else l[i.start]=d[t.end]={start:i.start,end:t.end,ring:i.ring.concat(t.ring)}}else{delete l[t.start];t.ring.unshift(e);l[t.start=u]=t}else l[u]=d[f]={start:u,end:f,ring:[e,s]}}}function index(n){return 2*n[0]+n[1]*(i+1)*4}function smoothLinear(n,t,r){n.forEach((function(n){var o=n[0],a=n[1],s=0|o,u=0|a,f=valid(t[u*i+s]);o>0&&o<i&&s===o&&(n[0]=smooth1(o,valid(t[u*i+s-1]),f,r));a>0&&a<e&&u===a&&(n[1]=smooth1(a,valid(t[(u-1)*i+s]),f,r))}))}contours.contour=contour;contours.size=function(n){if(!arguments.length)return[i,e];var t=Math.floor(n[0]),r=Math.floor(n[1]);if(!(t>=0&&r>=0))throw new Error("invalid size");return i=t,e=r,contours};contours.thresholds=function(n){return arguments.length?(a="function"===typeof n?n:Array.isArray(n)?constant(s.call(n)):constant(n),contours):a};contours.smooth=function(n){return arguments.length?(f=n?smoothLinear:noop,contours):f===smoothLinear};return contours}function finite(n){return isFinite(n)?n:NaN}function above(n,t){return null!=n&&+n>=t}function valid(n){return null==n||isNaN(n=+n)?-Infinity:n}function smooth1(n,t,r,o){const i=o-t;const e=r-t;const a=isFinite(i)||isFinite(e)?i/e:Math.sign(i)/Math.sign(e);return isNaN(a)?n:n+a-.5}function defaultX(n){return n[0]}function defaultY(n){return n[1]}function defaultWeight(){return 1}function density(){va