Unity3D中的最短旋转研究

2019-12-25 01:14李俊龙郭仁春姜檬王志淳
无线互联科技 2019年20期
关键词:轴角欧拉角刚体

李俊龙 郭仁春 姜檬 王志淳

摘   要:首先,文章介绍了刚体最短旋转的概念,刚体从一个方位旋转到另一个方位的过程中,可以有无限种方式,在这些方式中存在一种方式,绕某一轴旋转一次就能到达指定方位,并且该角在﹣180°~180°之间,称这样的旋转方式为最短旋转。其次,给出最短旋转的数学表达式,即两个方位角的四元数之比。在Unity 3D中,表示刚体方位的参数分别是欧拉角和四元数。文章采用具体实例验证最短旋转与四元数的关系,给出了寻找最短旋转的解决方案。

关键词:Unity 3D;最短旋转;四元数

在Unity 3D中,实现物体旋转有多种方式,如旋转矩阵、欧拉角和四元数等[1]。旋转需要两个基本参量轴和角,物体从一个方位旋转到另一个方位可以采用多次改變轴和角的方式,依次旋转。其中,有一种旋转方式是只绕一个轴旋转一次就能达到指定方位,且旋转角度在﹣180°~180°之间,称这样的旋转方式为最短旋转。这个定义由于没有其他文献支持,因此本文为便于理解,采用最短旋转的说法。

任意指定两个方位,要找出其中的最短旋转并不是一件容易的事。本文将给出最短旋转的数学描述以及在Unity 3D中实现最短旋转的方法。

1    最短旋转的数学描述

刚体的运动包括平动和转动。描述刚体的空间位置,用三维空间坐标点(x,y,z)表示,在Unity 3D中有3个基本坐标系,分别是世界坐标系、惯性坐标系与本地坐标系。相应的,描述刚体的旋转状态,即方位,是本地坐标系与惯性坐标系所形成的角度变化,采用欧拉角(α,β,γ)来描述。由于本文不涉及平移,因此为方便讨论,将惯性坐标系和世界坐标系重合。

众所周知,“两点之间线段最短”,同样两个方位之间也存在类似的关系,即最短旋转,两点之间的距离用两点位置之差来描述。相应的,两个方位之间的最短旋转用两个方位的四元数之比来描述。

如果方位a的四元数为q1,方位b的四元数为q2,刚体从方位a旋转到方位b的最短旋转的四元数为q,则q=q2÷q1,一般写成q= q2×q1-1

设四元数q的4个分量分别是(x,y,z,w),该四元数隐含了旋转轴向量n和旋转角θ,设轴向量n的3个分量为(nx,ny,nz)。一般将轴n和角θ写成“轴角对”的形式,即(n, θ)=( nx, ny, nz, θ)。四元数q=(x, y, z, w) 与轴角对(n, θ)=( nx, ny, nz, θ)之间的关系为:

在Unity 3D中,改变欧拉角和改变四元数是两种基本的旋转方式,Unity 3D提供了Lerp和Slerp两种插值函数,在两个方位之间进行采样插值。对欧拉角的Lerp插值,很难实现最短旋转,而四元数Slerp函数插值则非常容易实现最短旋转,下面通过例子来进行验证。

2    在Unity3D中改变欧拉角实现旋转

在Unity 3D中,制作一个空物体,命名为a,该物体位于世界坐标系的原点位置,在其下面放置一个立方体Cube和一个小球Sphere,调整立方体和小球的大小和位置,如图1所示,让小球位于立方体的一个角点。

将该段代码拖拽到物体x上,将场景中的物体a和b拖放到代码的公共变量卡槽a和b上,代码中的Vector3.Lerp是系统提供的插值函数,包括3个参数:起始向量a的欧拉角、结束向量b的欧拉角、插值t在0~1的取值,运行结果如图4所示。

从图4可以看到,物体x上的小球画出了一条奇怪的轨迹,说明用欧拉角插值不能实现最短旋转。

3    在Unity3D中改变四元数实现最短旋转

代码中q1和q2分别是a, b的四元数,Slerp是在两个四元数之间进行插值,再次运行,结果如图5所示。通过观察可以看出,物体x绕某一固定轴一次旋转到了指定位置,实现了最短旋转。

在图5中可以清楚地看出刚体绕轴n旋转了θ角。这个旋转过程用语言可以描述为:一个刚体从初始方位为a,其欧拉角为(-20,-30,9),旋转到末方位b,欧拉角为(15,80,60),找到轴角对(n, θ)实现最短旋转。方位a和b的四元数q1,q2可以通过各自的欧拉角求出,计算公式可参考苏超凡等[2]的研究,手工计算结果如下:

4    结语

仿照最短距离,本文给出了最短旋转的概念并给出了最短旋转的数学描述,即两个方位的四元数的比值。在Unity 3D中,通过修改四元数很容易实现最短旋转,并能够直观地给出旋转轴和角,对理解四元数在Unity 3D中的应用具有重要作用。

[参考文献]

[1]戈洪瑶,郭仁春.基于Unity 3D的欧拉角实现对物体旋转的应用[J].湖北农机化,2019(13):119-121.

[2]苏超凡,郭仁春.Unity 3D中欧拉角与四元数关系的研究[J].计算机科学与应用,2019(5):890-895.

猜你喜欢
轴角欧拉角刚体
差值法巧求刚体转动惯量
基于FPGA的同步机轴角编码器
车载冷发射系统多刚体动力学快速仿真研究
非直视紫外光非共面通信系统性能分析
刚体定点转动的瞬轴、极面动态演示教具
电磁耦合式位移传感器的直接数字解调电路设计
大姿态角入水时的鱼雷半实物仿真方法研究
闭环轴角解算误差分析及精度补偿方法
四元数与欧拉角刚体动力学数值积分算法及其比较
地震作用下承台刚体假定的适用性分析