stage.scaleMode = 'noScale'; //http://www.developpez.net/forums/d331608-4/autres-langages/algorithmes/contribuez/image-interpolation-spline-cubique/#post3513925 function secondDerivative( P:Array ):Array { var n:int = P.length; var yp1:Number = 0.0; var ypn:Number = 0.0; // build the tridiagonal system // (assume 0 boundary conditions: y2[0]=y2[-1]=0) var result:Array = new Array( n ); var matrix:Array = new Array( n ); var i:int = 0; for( i = 0; i < n ; i++ ) { matrix[ i ] = [ 0,0,0 ]; result[ i ] = 0; } matrix[ 0 ][ 1 ] = 1; for( i = 1; i < n-1; i++ ) { matrix[i][0]= (P[i].x-P[i-1].x)/6; matrix[i][1]= (P[i+1].x-P[i-1].x)/3; matrix[i][2]= (P[i+1].x-P[i].x)/6; result[ i ]= (P[i+1].y-P[i].y)/(P[i+1].x-P[i].x) - (P[i].y-P[i-1].y)/(P[i].x-P[i-1].x); } matrix[ n-1 ][ 1 ] = 1; var k:Number = 0; // solving pass1 (up->down) for( i = 1; i < n ; i++ ) { k = matrix[ i ][ 0 ] / matrix[ i - 1 ][ 1 ]; matrix[ i ][ 1 ] -= k * matrix[ i - 1 ][ 2 ]; matrix[ i ][ 0 ] = 0; result[ i ] -= k * result[ i - 1 ]; } // solving pass2 (down->up) for( i = n - 2; i >= 0; i-- ) { k = matrix[i][2]/matrix[i+1][1]; matrix[i][1] -= k*matrix[i+1][0]; matrix[i][2] = 0; result[i] -= k*result[i+1]; } // return second derivative value for each point P var y2:Array = new Array( n ); for( i = 0; i