LlRot2Angle - Second Life Wiki

LlRot2Angle

From Second Life Wiki

Jump to: navigation, search

Contents

Summary

Function: float llRot2Angle( rotation rot );

Returns a float that is the rotation angle represented by rot

• rotation rot

Use in conjunction with llRot2Axis.
To undo use llAxisAngle2Rot.

Caveats

This always returns a positive angle <= PI radians, that is, it is the unsigned minimum angle. A rotation of 3/2 PI radians (270 degrees) will return an angle of PI / 2 radians, not -PI / 2.

All Issues ~ Search JIRA for related Bugs

Examples

See Also

Functions

•  llAxisAngle2Rot
•  llRot2Axis
•  llRot2Up
•  llRot2Fwd
•  llRot2Left
•  llAngleBetween Similar functionality.

Deep Notes

Reference Implementation

float Rot2Angle(rotation a)//simple but turns out to not be very accurate.
{ 
    return 2.0 * llAcos(llSqrt((a.s * a.s) / (a.x * a.x + a.y * a.y + a.z * a.z + a.s * a.s));
}
float Rot2Angle(rotation r)//more complex implementation but more accurate, and reasonably fast.
{
    float s2 = r.s * r.s; // square of the s-element
    float v2 = r.x * r.x + r.y * r.y + r.z * r.z; // sum of the squares of the v-elements
 
    if (s2 < v2) // compare the s-component to the v-component
        return 2.0 * llAcos(llSqrt(s2 / (s2 + v2))); // use arccos if the v-component is dominant
    if (v2) // make sure the v-component is non-zero
        return 2.0 * llAsin(llSqrt(v2 / (s2 + v2))); // use arcsin if the s-component is dominant
 
    return 0.0; // argument is scaled too small to be meaningful, or it is a zero rotation, so return zero
}//Written by Moon Metty & Miranda Umino. Minor optimizations by Strife Onizuka

Search JIRA for related Issues

This article wasn't helpful for you? Maybe the related article at the LSL Wiki is able to bring enlightenment.