Difference between revisions of "Interpolation/Cosine"
Jump to navigation
Jump to search
m |
|||
Line 122: | Line 122: | ||
| return rotation rCos | | return rotation rCos | ||
| Returns spherical cosine interpolation of two rotations | | Returns spherical cosine interpolation of two rotations | ||
|} | |||
| Graph goes here, k. | |||
|} | |||
<div style="float:right;font-size: 80%;"> | |||
Released to Public Domain. By Nexii Malthus</div> | |||
|} | |||
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%" | |||
!style="color: #000000; background-color: #aaaaff;" height="20px"| | |||
===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> | |||
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%" | |||
| | |||
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse" | |||
!style="background-color: #d0d0ee" | Input | |||
!style="background-color: #d0d0ee" | Description | |||
|- | |||
| rotation r0 | |||
| Start | |||
|- | |||
| rotation r1 | |||
| End | |||
|- | |||
| float speed | |||
| Degrees peak speed of rotation in animation | |||
|- | |||
!style="background-color: #d0d0ee" | Output | |||
!style="background-color: #d0d0ee" | Description | |||
|- | |||
| return rotation rCos | |||
| Creates a spherical cosine animation of two rotations with a specific peak speed | |||
|- | |||
!style="background-color: #eed0d0" colspan="2"| Requirement | |||
|- | |||
|style="background-color: #eed0d0" colspan="2"| function rotation rCos(rotation r0,rotation r1,float t) | |||
|} | |} | ||
| Graph goes here, k. | | Graph goes here, k. |
Revision as of 13:46, 4 September 2011
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials | Interpolation |
Linear 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>
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>
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>
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>
Released to Public Domain. By Nexii Malthus
|