Difference between revisions of "Interpolation/Linear/Rotation"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with "{{LSL_Function |mode=user |func=rLin |p1_type=rotation|p1_name=x |p2_type=rotation|p2_name=y |p3_type=float|p3_name=t |return_type=rotation |return_value=returns the interpolatio…")
 
m (<lsl> tag to <source>)
 
(3 intermediate revisions by one other user not shown)
Line 9: Line 9:
|func_desc=
|func_desc=
Interpolates between two rotation values in a linear fashion.
Interpolates between two rotation values in a linear fashion.
|spec=<lsl>rotation rLin(rotation x, rotation y, float t) {
|spec=<source lang="lsl2">rotation rLin(rotation x, rotation y, float t) {
     float ang = llAngleBetween(x, y);
     float ang = llAngleBetween(x, y);
     if(ang > PI) ang -= TWO_PI;
     if(ang > PI) ang -= TWO_PI;
     return x * llAxisAngle2Rot(llRot2Axis(y/x)*x, ang*t);
     return x * llAxisAngle2Rot(llRot2Axis(y/x)*x, ang*t);
}</lsl>
}
|examples=<lsl>
// Released into public domain. By Nexii Malthus.</source>
rotation x = llRot2Euler(<0,0,30*DEG_TO_RAD>);
|examples=<source lang="lsl2">
rotation y = llRot2Euler(<0,0,90*DEG_TO_RAD>);
rotation x = llEuler2Rot(<0,0,30*DEG_TO_RAD>);
rotation z = rLin(x, y, 0.5); // z equivalent to euler rotation of 60 degrees on Z axis</lsl>
rotation y = llEuler2Rot(<0,0,90*DEG_TO_RAD>);
rotation z = rLin(x, y, 0.5); // z equivalent to euler rotation of 60 degrees on Z axis
llOwnerSay((string)(llRot2Euler(z)*RAD_TO_DEG)); // <0.00000, 0.00000, 60.00001>
</source>
|cat1=Examples
|cat1=Examples
}}
}}

Latest revision as of 15:05, 24 January 2015

Summary

Function: rotation rLin( rotation x, rotation y, float t );

Interpolates between two rotation values in a linear fashion.
Returns a rotation

• rotation x
• rotation y
• float t

Specification

rotation rLin(rotation x, rotation y, float t) {
    float ang = llAngleBetween(x, y);
    if(ang > PI) ang -= TWO_PI;
    return x * llAxisAngle2Rot(llRot2Axis(y/x)*x, ang*t);
}
// Released into public domain. By Nexii Malthus.

Examples

rotation x = llEuler2Rot(<0,0,30*DEG_TO_RAD>);
rotation y = llEuler2Rot(<0,0,90*DEG_TO_RAD>);
rotation z = rLin(x, y, 0.5); // z equivalent to euler rotation of 60 degrees on Z axis
llOwnerSay((string)(llRot2Euler(z)*RAD_TO_DEG)); // <0.00000, 0.00000, 60.00001>