LlRot2Angle

De DigiWiki.

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
Outils personnels
  • Cette page a été consultée 465 fois.
donate
Google Ads