Unity3D中Quaternion.Euler方法解析

8.3.3 Euler方法:欧拉角对应的四元数

基本语法:(1)public static Quaternion Euler(Vector3 euler);

(2)public static Quaternion Euler(float x, float y, float z);

功能说明:此方法用于返回欧拉角Vector3(x,y,z)对应的四元数Quaternion实例。四元数Quaternion(qx,qy,qz,qw)与其欧拉角eulerAngles(ex,ey,ez)之间的对应关系如下。

已知PIover180=3.141592/180=0.0174532925f是计算机图形学中一常量,则变换过程如下。

ex=ex* PIover180/2.0f;

ey=ey* PIover180/2.0f;

ez=ez* PIover180/2.0f;

则:

qx=sin(ex)cos(ey)cos(ez)+cos(ex)sin(ey)sin(ez);

qy=cos(ex)sin(ey)cos(ez)- sin (ex)cos(ey)sin(ez);

qz=cos(ex)cos(ey)sin(ez)-sin (ex)sin(ey)cos(ez);

qw=cos(ex)cos(ey)cos(ez)+sin (ex)sin(ey)sin(ez);

实例演示:下面通过实例验证上述算法。

using UnityEngine;
using System.Collections;

public class Euler_ts : MonoBehaviour
{
    //记录欧拉角,单位为角度,可以在Inspector面板中设置
    public float ex, ey, ez;
    //用于记录计算结果
    float qx, qy, qz, qw;
    float PIover180 = 0.0174532925f;//常量
    Quaternion Q = Quaternion.identity;
    void OnGUI()
    {
        if (GUI.Button(new Rect(10.0f, 10.0f, 100.0f, 45.0f), "计算"))
        {
            Debug.Log("欧拉角:" + " ex:" + ex + "  ey:" + ey + "  ez:" + ez);
            //调用方法计算
            Q = Quaternion.Euler(ex, ey, ez);
            Debug.Log("Q.x:" + Q.x + " Q.y:" + Q.y + " Q.z:" + Q.z + " Q.w:" + Q.w);
            //测试算法
            ex = ex * PIover180 / 2.0f;
            ey = ey * PIover180 / 2.0f;
            ez = ez * PIover180 / 2.0f;
            qx = Mathf.Sin(ex) * Mathf.Cos(ey) * Mathf.Cos(ez) + Mathf.Cos(ex) * Mathf.Sin(ey) * Mathf.Sin(ez);
            qy = Mathf.Cos(ex) * Mathf.Sin(ey) * Mathf.Cos(ez) - Mathf.Sin(ex) * Mathf.Cos(ey) * Mathf.Sin(ez);
            qz = Mathf.Cos(ex) * Mathf.Cos(ey) * Mathf.Sin(ez) - Mathf.Sin(ex) * Mathf.Sin(ey) * Mathf.Cos(ez);
            qw = Mathf.Cos(ex) * Mathf.Cos(ey) * Mathf.Cos(ez) + Mathf.Sin(ex) * Mathf.Sin(ey) * Mathf.Sin(ez);
            Debug.Log(" qx:" + qx + " qy:" + qy + " qz:" + qz + " qw:" + qw);
        }
    }
}

在这段代码中,首先声明了三个公共变量ex,ey, ez,用于记录欧拉角,单位为角度,其值可以在Inspector面板中设置。然后在OnGUI方法中定义了一个Button,先调用Quaternion的静态方法Euler,打印出计算结果,然后再测试功能说明中的算法,并打印出计算结果。图8-6是一组数据的测试结果。


本文章摘自图书《Unity API解析》,源码下载地址:http://www.ituring.com.cn/book/1474

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页