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方法解析相关推荐

  1. Unity3D中Layers和LayerMask解析

    Unity3D中Layers和LayerMask解析 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31). 在Unity中可编辑的Layer如下图所示: ...

  2. SqlHelper类中的ExecuteNonQuery方法解析

    在SqlHelper类(windows原)中,ExecuteNonQuery方法通常用于执行数据库更新与返回存储过程的输出参数,它有九个重载,接下来我们来一一解析. 首先介绍一下此方法可以输入哪些参数 ...

  3. Unity3D中HideFlags.DontSave使用解析

    4.1.1 DontSave:保留对象到新场景 功能说明:此属性的功能是用来设置是否将Object对象保留到新的场景(Scene)中,如果使用HideFlags.DontSave,则Object对象将 ...

  4. Unity3d中Quaternion.SetFromToRotation和Quaternion.FromToRotation

    1.基本语法:public void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection); 功能说明:此方法用于创建一个从fro ...

  5. react中ref使用方法解析

    文章目录 什么是ref string类型 createRef创建 写法一: 写法二: 什么是ref 组件不是真实的DOM节点,在react开发中,官方也不建议直接去操作原生的DOM.组件的DOM节点是 ...

  6. oracle中删除级联方法,解析Oracle中多表级联删除的方法

    创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除.哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了 表间的关 ...

  7. Unity3D中的函数方法及解释

    一.刷新函数 Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其LateUpdate在每一帧被调用. FixedUp ...

  8. pandas中的to_excel方法解析

  9. Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会

    在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...

最新文章

  1. 致命错误: Python.h:没有那个文件或目录
  2. AutoMapper入门使用
  3. 2019年东莞特长生 游戏(洛谷 P2661 信息传递)
  4. 耗时两年,19岁小伙采用230片纯74逻辑芯片搭建出32位处理器!可玩贪吃蛇
  5. 洛谷OJ上的A+B花(zhuang)式(bi)解法
  6. 圣诞节手绘插画素材,点燃节日温情
  7. Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
  8. Elasticsearch的javaAPI之percolator
  9. LINQ(LINQ to Entities)
  10. Julia : 1亿条记录读取测试,及几个优化点
  11. 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
  12. 兜儿.生活(三)之《太阳照常升起》杜兜儿版
  13. ch3 系统总线(一)
  14. 让项目经理受用终身的8个道理
  15. 实用Chrome插件-OneTab
  16. 【转载】哪些域名后缀可在工信部进行备案操作
  17. 黑产系列01-如何发现黑产情报
  18. 腾讯T2大牛亲自教你!没有逻辑思维学java很痛苦
  19. 等比数列求和 (快速幂 + 逆元)
  20. 基于javaweb的网上订餐管理系统(java+jsp+bootstrap+jquery+mysql)

热门文章

  1. EMUI10开启公测!华为P30系列率先尝鲜,详细升级教程奉上
  2. 港科校友 | 香港科大EMBA刘礼华校友获评俄罗斯自然科学院院士
  3. 台前与幕后的5G战争
  4. 公历(阳历)转农历(阴历)接口
  5. 英语语法 定冠词与专有名词
  6. echarts网络拓扑图动态流程图
  7. 利用FlexCell实现的一些报表统计应用
  8. 在vue项目中使用高德地图
  9. 神经网络的三种训练方法,神经网络常用训练方法
  10. 如何拍背景虚化的照片_如何拍摄出突出主体(背景虚化)的照片