LlAngleBetween

来自人工智能助力教育知识百科
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: float llAngleBetween( rotation a, rotation b );
参数:返回一个浮点数,它是旋转a和旋转b之间的弧度角。
•旋转a–开始旋转

•旋转b–结束旋转

注意事项
重要问题~Search JIRA for related Bugs
示例
default
{
    touch_start(integer num_detected)
    {
        rotation currentRootRotation = llGetRootRotation();
        float angle = llAngleBetween(ZERO_ROTATION, currentRootRotation);
 
        // PUBLIC_CHANNEL has the integer value 0
        llSay(PUBLIC_CHANNEL,
            "llAngleBetween(ZERO_ROTATION, " + (string)currentRootRotation + ") = " + (string)angle);
    }
}
相关函数
llRotBetweenllRot2Angle
相关事件
== 参考 ==

float AngleBetween(rotation a, rotation b)//simple but turns out to not be very accurate.

{

   return 2.0 * llAcos( llFabs(a.x * b.x + a.y * b.y + a.z * b.z + a.s * b.s)
                     / llSqrt((a.x * a.x + a.y * a.y + a.z * a.z + a.s * a.s)
                            * (b.x * b.x + b.y * b.y + b.z * b.z + b.s * b.s)));

} float AngleBetween(rotation a, rotation b)//more complex implementation but more accurate, and reasonably fast.

{

   rotation r = b / a; // calculate the rotation between the two arguments as quaternion
   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; // one or both arguments are scaled too small to be meaningful, or the values are the same, so return zero

}//Written by Moon Metty & Miranda Umino. Minor optimizations by Strife Onizuka