code: function ( points, scale ) {
  
  		var c = [], v3 = [],
  		point, intPoint, weight, w2, w3,
  		pa, pb, pc, pd;
  
  		point = ( points.length - 1 ) * scale;
  		intPoint = Math.floor( point );
  		weight = point - intPoint;
  
  		c[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1;
  		c[ 1 ] = intPoint;
  		c[ 2 ] = intPoint > points.length - 2 ? intPoint : intPoint + 1;
  		c[ 3 ] = intPoint > points.length - 3 ? intPoint : intPoint + 2;
  
  		pa = points[ c[ 0 ] ];
  		pb = points[ c[ 1 ] ];
  		pc = points[ c[ 2 ] ];
  		pd = points[ c[ 3 ] ];
  
  		w2 = weight * weight;
  		w3 = weight * w2;
  
  		v3[ 0 ] = interpolate( pa[ 0 ], pb[ 0 ], pc[ 0 ], pd[ 0 ], weight, w2, w3 );
  		v3[ 1 ] = interpolate( pa[ 1 ], pb[ 1 ], pc[ 1 ], pd[ 1 ], weight, w2, w3 );
  		v3[ 2 ] = interpolate( pa[ 2 ], pb[ 2 ], pc[ 2 ], pd[ 2 ], weight, w2, w3 );
  
  		return v3;
  
  	}
docs: Catmull-Rom spline