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
Unity3D中Quaternion.Euler方法解析相关推荐
- Unity3D中Layers和LayerMask解析
Unity3D中Layers和LayerMask解析 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31). 在Unity中可编辑的Layer如下图所示: ...
- SqlHelper类中的ExecuteNonQuery方法解析
在SqlHelper类(windows原)中,ExecuteNonQuery方法通常用于执行数据库更新与返回存储过程的输出参数,它有九个重载,接下来我们来一一解析. 首先介绍一下此方法可以输入哪些参数 ...
- Unity3D中HideFlags.DontSave使用解析
4.1.1 DontSave:保留对象到新场景 功能说明:此属性的功能是用来设置是否将Object对象保留到新的场景(Scene)中,如果使用HideFlags.DontSave,则Object对象将 ...
- Unity3d中Quaternion.SetFromToRotation和Quaternion.FromToRotation
1.基本语法:public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection); 功能说明:此方法用于创建一个从fro ...
- react中ref使用方法解析
文章目录 什么是ref string类型 createRef创建 写法一: 写法二: 什么是ref 组件不是真实的DOM节点,在react开发中,官方也不建议直接去操作原生的DOM.组件的DOM节点是 ...
- oracle中删除级联方法,解析Oracle中多表级联删除的方法
创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除.哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了 表间的关 ...
- Unity3D中的函数方法及解释
一.刷新函数 Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其LateUpdate在每一帧被调用. FixedUp ...
- pandas中的to_excel方法解析
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...
最新文章
- 致命错误: Python.h:没有那个文件或目录
- AutoMapper入门使用
- 2019年东莞特长生 游戏(洛谷 P2661 信息传递)
- 耗时两年,19岁小伙采用230片纯74逻辑芯片搭建出32位处理器!可玩贪吃蛇
- 洛谷OJ上的A+B花(zhuang)式(bi)解法
- 圣诞节手绘插画素材,点燃节日温情
- Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- Elasticsearch的javaAPI之percolator
- LINQ(LINQ to Entities)
- Julia : 1亿条记录读取测试,及几个优化点
- 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
- 兜儿.生活(三)之《太阳照常升起》杜兜儿版
- ch3 系统总线(一)
- 让项目经理受用终身的8个道理
- 实用Chrome插件-OneTab
- 【转载】哪些域名后缀可在工信部进行备案操作
- 黑产系列01-如何发现黑产情报
- 腾讯T2大牛亲自教你!没有逻辑思维学java很痛苦
- 等比数列求和 (快速幂 + 逆元)
- 基于javaweb的网上订餐管理系统(java+jsp+bootstrap+jquery+mysql)