cubic-spline-ts
Version:
spline interpolation
3 lines (2 loc) • 1.89 kB
JavaScript
var s=function(){function s(s,t){this.xs=s,this.ys=t,this.ks=this.getNaturalKs(new Float64Array(this.xs.length))}var i=s.prototype;return i.getNaturalKs=function(s){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(s,i){for(var h=s.length,r=0,x=0;r<h&&x<=h;){for(var n=0,a=-Infinity,e=r;e<h;e++){var o=Math.abs(s[e][x]);o>a&&(n=e,a=o)}if(0===s[n][x])x++;else{t(s,r,n);for(var f=r+1;f<h;f++){var y=s[f][x]/s[r][x];s[f][x]=0;for(var u=x+1;u<=h;u++)s[f][u]-=s[r][u]*y}r++,x++}}for(var v=h-1;v>=0;v--){var l=0;s[v][v]&&(l=s[v][h]/s[v][v]),i[v]=l;for(var c=v-1;c>=0;c--)s[c][h]-=s[c][v]*l,s[c][v]=0}return i}(h,s)},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)},s}();function t(s,t,i){var h=s[t];s[t]=s[i],s[i]=h}export default s;
//# sourceMappingURL=cubic-spline-ts.modern.js.map