Interpolation/Linear
Jump to navigation
Jump to search
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials | Interpolation |
Linear Interpolation
Vector Linear | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Linear interpolation of v0 and v1 with fraction t. <lsl> vector vLin(vector v0, vector v1,float t){ return v0*(1-t) + v1*t; } </lsl>
Released to Public Domain. By Nexii Malthus
|
Rotation Linear | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Spherical Linear interpolation of r0 and r1 with fraction t. Also known as SLERP <lsl> rotation rLin(rotation r0,rotation r1,float t) { float ang = llAngleBetween(r0, r1); if(ang > PI) ang -= TWO_PI; return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*t); } </lsl>
Released to Public Domain. By Nexii Malthus
|
Vector List, Linear | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Interpolates between two vectors in a list of vectors. <lsl> vector pLin(list v, float t, integer Loop ){ float l = llGetListLength(v); t *= l-1;
float f = (float)llFloor(t);
integer i1 = 0; integer i2 = 0;
if(Loop){ i1 = (integer)(f-llFloor(f/l)*l);
++f;i2 = (integer)(f-llFloor(f/l)*l);}
else {
if( f > l-1 ) i1 = (integer)l-1;
else if( f >= 0 ) i1 = (integer)f;
if(f+1 > l-1 ) i2 = (integer)l-1;
else if(f+1 >= 0 ) i2 = (integer)f+1; }
vector v1 = llList2Vector(v, i1);
vector v2 = llList2Vector(v, i2);
return vLin( v1, v2, t-f );}
</lsl>
Released to Public Domain. By Nexii Malthus
|
