UNPKG

cubic-spline-ts

Version:
3 lines (2 loc) 1.88 kB
function s(s,t,i){var h=s[t];s[t]=s[i],s[i]=h}module.exports=function(){function t(s,t){this.xs=s,this.ys=t,this.ks=this.getNaturalKs(new Float64Array(this.xs.length))}var i=t.prototype;return i.getNaturalKs=function(t){for(var i=this.xs.length-1,h=function(s,t){for(var i=[],h=0;h<s;h++)i.push(new Float64Array(t));return i}(i+1,i+2),x=1;x<i;x++)h[x][x-1]=1/(this.xs[x]-this.xs[x-1]),h[x][x]=2*(1/(this.xs[x]-this.xs[x-1])+1/(this.xs[x+1]-this.xs[x])),h[x][x+1]=1/(this.xs[x+1]-this.xs[x]),h[x][i+1]=3*((this.ys[x]-this.ys[x-1])/((this.xs[x]-this.xs[x-1])*(this.xs[x]-this.xs[x-1]))+(this.ys[x+1]-this.ys[x])/((this.xs[x+1]-this.xs[x])*(this.xs[x+1]-this.xs[x])));return h[0][0]=2/(this.xs[1]-this.xs[0]),h[0][1]=1/(this.xs[1]-this.xs[0]),h[0][i+1]=3*(this.ys[1]-this.ys[0])/((this.xs[1]-this.xs[0])*(this.xs[1]-this.xs[0])),h[i][i-1]=1/(this.xs[i]-this.xs[i-1]),h[i][i]=2/(this.xs[i]-this.xs[i-1]),h[i][i+1]=3*(this.ys[i]-this.ys[i-1])/((this.xs[i]-this.xs[i-1])*(this.xs[i]-this.xs[i-1])),function(t,i){for(var h=t.length,x=0,r=0;x<h&&r<=h;){for(var n=0,a=-Infinity,e=x;e<h;e++){var o=Math.abs(t[e][r]);o>a&&(n=e,a=o)}if(0===t[n][r])r++;else{s(t,x,n);for(var f=x+1;f<h;f++){var y=t[f][r]/t[x][r];t[f][r]=0;for(var u=r+1;u<=h;u++)t[f][u]-=t[x][u]*y}x++,r++}}for(var v=h-1;v>=0;v--){var l=0;t[v][v]&&(l=t[v][h]/t[v][v]),i[v]=l;for(var c=v-1;c>=0;c--)t[c][h]-=t[c][v]*l,t[c][v]=0}return i}(h,t)},i.getIndexBefore=function(s){for(var t=0,i=this.xs.length,h=0;t<i;)h=Math.floor((t+i)/2),this.xs[h]<s&&h!==t?t=h:i=this.xs[h]>=s&&h!==i?h:t;return t+1},i.at=function(s){var t=this.getIndexBefore(s),i=(s-this.xs[t-1])/(this.xs[t]-this.xs[t-1]);return(1-i)*this.ys[t-1]+i*this.ys[t]+i*(1-i)*((this.ks[t-1]*(this.xs[t]-this.xs[t-1])-(this.ys[t]-this.ys[t-1]))*(1-i)+(-this.ks[t]*(this.xs[t]-this.xs[t-1])+(this.ys[t]-this.ys[t-1]))*i)},t}(); //# sourceMappingURL=cubic-spline-ts.js.map