您的位置:首页 > 移动开发 > Unity3D

Unity3D中Quaternion.Euler方法解析

2015-11-05 15:56 686 查看
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是一组数据的测试结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: