Interpolation/Cosine

From Second Life Wiki
Jump to navigation Jump to search

Cosine Interpolation

Float Cosine

Cosine interpolation of f0 and f1 with fraction t. <lsl> float fCos(float f0,float f1,float t) {

   float F = (1 - llCos(t*PI))/2;
   return f0*(1-F)+f1*F;

} </lsl>

Input Description
float f0 Start (t = 0.0)
float f1 End (t = 1.0)
float t Fraction of interpolation
Output Description
return float fCos Returns cosine interpolation of two floats
Interp Chart2.png
Released to Public Domain. By Nexii Malthus


Vector Cosine

Cosine interpolation of v0 and v1 with fraction t. <lsl> vector vCos(vector v0,vector v1,float t){

   float F = (1 - llCos(t*PI))/2;
   return v0*(1-F)+v1*F;}

</lsl>

Input Description
vector v0 Start (t = 0.0)
vector v1 End (t = 1.0)
float t Fraction of interpolation
Output Description
return vector vCos Returns cosine interpolation of two vectors
Graph goes here, k.
Released to Public Domain. By Nexii Malthus


Rotation Cosine

Spherical Cosine interpolation of r0 and r1 with fraction t. I liken to call it as SCORP <lsl> rotation rCos(rotation r0,rotation r1,float t){

   // Spherical-Cosine Interpolation
   float f = (1 - llCos(t*PI))/2;
   float ang = llAngleBetween(r0, r1);
   if( ang > PI) ang -= TWO_PI;
   return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*f);}

</lsl>

Input Description
rotation r0 Start (t = 0.0)
rotation r1 End (t = 1.0)
float t Fraction of interpolation
Output Description
return rotation rCos Returns spherical cosine interpolation of two rotations
Graph goes here, k.
Released to Public Domain. By Nexii Malthus


Rotation Cosine Aim

Spherical Cosine interpolation of r0 and r1 with speed regulation. Does the entire animation loop to rotate between r0 to r1 up to peak speed, using the cosine interpolation it makes it appear to accelerate and decelerate realistically. <lsl> rCosAim( rotation r0, rotation r1, float speed ){

   float ang = llAngleBetween(r0, r1) * RAD_TO_DEG;
   if( ang > PI) ang -= TWO_PI;
   float x; float y = (ang/speed)/0.2;
   for( x = 0.0; x < y; x += 1.0 )
       llSetRot( rCos( r0, r1, x/y ) );

} </lsl>

Input Description
rotation r0 Start
rotation r1 End
float speed Degrees peak speed of rotation in animation
Output Description
return rotation rCos Creates a spherical cosine animation of two rotations with a specific peak speed
Requirement
function rotation rCos(rotation r0,rotation r1,float t)
Graph goes here, k.
Released to Public Domain. By Nexii Malthus