cat-rom-spline-es6
Version:
Catmull Rom spline interpolation made easy. (repackaged with es6 import/export)
1 lines • 1.92 kB
JavaScript
!function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=t,n.c=r,n.i=function(t){return t},n.d=function(t,r,e){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=4)}([function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),r.d(n,"catmullRomSpline",function(){return a});var e=r(1),o=r(3),u=r(2),c=function(t,n,r,u,c,i,a,f,l){var p,s,h,v,d,x;return p=[],s=[],h=[],v=[],d=[],x=[],e(p,o([],t,(i-l)/(i-c)),o([],n,(l-c)/(i-c))),e(s,o([],n,(a-l)/(a-i)),o([],r,(l-i)/(a-i))),e(h,o([],r,(f-l)/(f-a)),o([],u,(l-a)/(f-a))),e(v,o([],p,(a-l)/(a-c)),o([],s,(l-c)/(a-c))),e(d,o([],s,(f-l)/(f-i)),o([],h,(l-i)/(f-i))),e(x,o([],v,(a-l)/(a-i)),o([],d,(l-i)/(a-i))),x},i=function(t,n,r,e,o,i){var a,f,l,p,s,h,v=[];h=u(n,r),f=0,l=Math.pow(u(t,n),i),p=Math.pow(h,i)+l,s=Math.pow(u(r,e),i)+p,o||(o=1.5*h);var d=(p-l)/o;for(a=l;a<p;)a+=d,v.push(c(t,n,r,e,f,l,p,s,a));return v},a=function(t,n){if(t.length<4)throw"Must have at least 4 control points to generate catmull rom spline";var r,e,o,u,c,a=[];n=n||{};var f=n.knot||.5,l=n.samples;return t.forEach(function(n,p){c=1,r=n;do{e=t[p+c],c++}while(r&&e&&r[0]===e[0]&&r[1]===e[1]);do{o=t[p+c],c++}while(e&&o&&e[0]===o[0]&&e[1]===o[1]);do{u=t[p+c],c++}while(o&&u&&o[0]===u[0]&&o[1]===u[1]);e&&o&&u&&(a.push(e),a=a.concat(i(r,e,o,u,l,f)),t[c]||a.push(o))}),a}},function(t,n){function r(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t}t.exports=r},function(t,n){function r(t,n){var r=n[0]-t[0],e=n[1]-t[1];return Math.sqrt(r*r+e*e)}t.exports=r},function(t,n){function r(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t}t.exports=r},function(t,n,r){t.exports=r(0)}]);