zoukankan      html  css  js  c++  java
  • 第28天3D数学

    欧拉角

    由三个角度(x,y,z)组成,在特定坐标系下用于描述物体的旋转量

    通俗的说,空间中任意旋转都可以分解成绕三个互相垂直轴的三个旋转角组成的序列

    旋转序列

    heading-pitch-bank:

    先转Y轴 按照惯性坐标系

    再转X轴 按照物体坐标系

    再转Z轴 按照物体坐标系

    Quaternion q1 = new Quaternion(0,-Mathf.Sin(45*Mathf.Deg2Rad),0,-Mathf.Cos(45*Mathf.Deg2Rad));

    获取欧拉角

    Inspector调节的rotation就是欧拉角

    transform.eulerAngles = new Vector3(1, 1, 1);       //x,y,z的旋转角度

    优点

    直观,容易理解

    万向节死锁

    四元数

    在3D空间中,任意旋转都可以表示绕着某个轴旋转一个旋转角得到

    对于给定旋转,假设为绕着n轴,旋转θ度,n轴为(x,y,z),那么可以构建四元数:

    • W=cos(θ/2)
    • X=sin(θ/2)*cos(a)
    • Y=sin(θ/2)*y
    • Z=sin(θ/2)*z
    • x,y,z在xyz方向上的偏移量(分量)
    • 如果旋转没有分量a=0°  cosa=1
    • 公式可以简写:W=cos(θ/2)
    • X=sin(θ/2)
    • Y=sin(θ/2)
    • Z=sin(θ/2)

    Quaternion

    Unity中用来表示四元数的结构体

    轴角对

    公式:

    • W=cos(θ/2)
    • X=sin(θ/2)
    • Y=sin(θ/2)
    • Z=sin(θ/2)

    API

    Quaternion.AngleAxis

    Quaternion q=Quaternion.AngleAxis(90,Vector3.up); //第一个参数是角度,第二个参数围绕哪个轴旋转,旋转方向遵守左手定则

    欧拉角和四元数的转换

    欧拉角转四元数

    Quaternion.Euler(x,y,z)

    Quaternion q=Quaternion.Euler(0,90,0);//绕着Y轴旋转90°

    四元数转欧拉角

    q.eulerAngles

    Vector3 angle=q.eulerAngles;   //欧拉角是Vector3

    负四元数

    四元数q[x,y,z,w]

    负四元数-q[-x,-y,-z,-w]

    几何意义

    q与-q所代表的旋转量是相同的

    单位四元数

    两个

    -1[0,0,0]

    1[0,0,0]

    几何意义

    表示没有旋转量的四元数

    API

    Quaternion.identity

    四元数叉乘

    四元数*四元数=四元数

    几何意义

    将两个四元数的旋转量进行叠加,等到一个新的四元数

    Quaternion q1= Quaternion.AngleAxis(-30,Vector3.up);
    Quaternion q2= Quaternion.AngleAxis(-60, Vector3.up);
    Quaternion q3 = q1 * q2;

    四元数*向量

    四元数*向量=向量

    几何意义

    将向量按照四元数的旋转量旋转,得到一个新的向量

    注:只能是四元数*向量,不能是向量*四元数

    四元数插值

    Quaternion.Slerp

    几何意义

    四元数插值计算得到的是form与to之间的插值旋转量

    LookRotation

    意义

    任意一个物体在朝向世界的正前方,也就是Z轴方向,通过旋转使其物体朝向目标向量

    LookRotation计算的就是旋转所需的旋转量

  • 相关阅读:
    ASCII码
    cron表达式学习
    mysql学习二、SQL常用数据类型
    mysql学习一 常用语句
    python学习
    搬砖
    新接触Linux 命令
    搬砖
    python encode decode
    201521123071 《JAVA程序设计》第十二周学习总结
  • 原文地址:https://www.cnblogs.com/yifengs/p/14237224.html
Copyright © 2011-2022 走看看