UNPKG

cubic-spline-ts

Version:
3 lines (2 loc) 2.06 kB
!function(s,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(s=s||self).cubicSplineTs=t()}(this,function(){function s(s,t,i){var h=s[t];s[t]=s[i],s[i]=h}return(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),r=1;r<i;r++)h[r][r-1]=1/(this.xs[r]-this.xs[r-1]),h[r][r]=2*(1/(this.xs[r]-this.xs[r-1])+1/(this.xs[r+1]-this.xs[r])),h[r][r+1]=1/(this.xs[r+1]-this.xs[r]),h[r][i+1]=3*((this.ys[r]-this.ys[r-1])/((this.xs[r]-this.xs[r-1])*(this.xs[r]-this.xs[r-1]))+(this.ys[r+1]-this.ys[r])/((this.xs[r+1]-this.xs[r])*(this.xs[r+1]-this.xs[r])));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,r=0,x=0;r<h&&x<=h;){for(var n=0,e=-Infinity,o=r;o<h;o++){var f=Math.abs(t[o][x]);f>e&&(n=o,e=f)}if(0===t[n][x])x++;else{s(t,r,n);for(var a=r+1;a<h;a++){var u=t[a][x]/t[r][x];t[a][x]=0;for(var y=x+1;y<=h;y++)t[a][y]-=t[r][y]*u}r++,x++}}for(var v=h-1;v>=0;v--){var c=0;t[v][v]&&(c=t[v][h]/t[v][v]),i[v]=c;for(var l=v-1;l>=0;l--)t[l][h]-=t[l][v]*c,t[l][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.umd.js.map