2023-10-25 14:28:13 +08:00
|
|
|
|
---
|
|
|
|
|
title: 四元数学习笔记
|
|
|
|
|
date: 2023-10-25 13:16:32
|
|
|
|
|
excerpt:
|
|
|
|
|
tags:
|
|
|
|
|
rating: ⭐
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# 前言
|
|
|
|
|
推荐学习视频:
|
|
|
|
|
- [四元数的可视化](https://www.bilibili.com/video/BV1SW411y7W1/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
|
|
|
|
- [四元数和三维转动,可互动的探索式视频](https://www.bilibili.com/video/BV14Y4y1z7xW/?spm_id_from=333.788.recommend_more_video.1&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
|
|
|
|
|
|
|
|
|
另外作者还建立了一个四元数可视化网站: https://eater.net/quaternions ,点击里面的教学视频之后点击正方上的按钮就可以停止播放视频,并且可以手动操作四元数。
|
|
|
|
|
|
|
|
|
|
# 四元数
|
|
|
|
|
是一个四维数值系统用于描述三维空间关系。(现在主要用于描述旋转)
|
|
|
|
|
|
|
|
|
|
四元数的表达形式为:
|
|
|
|
|
$$q = w + xi + yj +zk$$
|
|
|
|
|
|
|
|
|
|
ijk可以分别理解为使用虚数来表示x、y、z3个轴的旋转值,使用一个实数w作为Scale。
|
|
|
|
|
本身就可以理解为球形角度映射到一根轴上。举例:假设在二维坐标轴中,i,j即为x,y轴的坐标值。扩展到三维即i,j,k为x,y,z的坐标值。
|
|
|
|
|
|
|
|
|
|
## 四元数与旋转矩阵
|
|
|
|
|
图中的绿色、红色、蓝色部分分别是四元数的i j k的数据。
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 计算规则
|
|
|
|
|
四元数可用一般分配率来计算,其虚部遵循以下规则:
|
|
|
|
|
$$i^2+j^2+k^2=-1$$
|
|
|
|
|
$$ij = -ji =k$$
|
|
|
|
|
$$jk=-ky=i$$
|
|
|
|
|
$$ki=-ik=j$$
|
|
|
|
|
|
|
|
|
|
# 旋转规则
|
|
|
|
|
以垂直关系依次旋转每个轴。
|
|
|
|
|
|
|
|
|
|
## 右手定理
|
|
|
|
|
>视频作者为了方便理解创建出的理论。当i的数值从0=>i时,垂直于x轴的yz平面就会按照右手方向(逆时针)进行旋转。
|
|
|
|
|
|
|
|
|
|
PS.该定理是建立在使用左乘规则的基础上,如果使用右乘,就需要变成左手定理。
|
|
|
|
|
|
|
|
|
|
## 左乘规则
|
|
|
|
|
$$q \cdot p$$
|
|
|
|
|
可以看做为使用四元数q对点P进行了旋转。
|
|
|
|
|
所以四元数乘法不满足交换律。
|
|
|
|
|
$$q \cdot p \neq p \cdot q$$
|
|
|
|
|
|
2023-10-25 15:06:01 +08:00
|
|
|
|
右乘规则顺序相反。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 在3D世界中使用四元数来控制旋转
|
|
|
|
|
使用四元数将物体旋转,需要使用到"夹心乘法"
|
|
|
|
|
$$p \rightarrow q\cdot p \cdot q^-1$$
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
## 四元数规范化
|
2023-10-25 17:08:15 +08:00
|
|
|
|
$$x^2 + y^2 + z^2 =1$$
|
|
|
|
|
# FBX
|
|
|
|
|
四元数旋转顺序 xyz
|
|
|
|
|
可以使用
|
|
|
|
|
`FbxNode::RotationOrder`
|
|
|
|
|
了解其顺序。
|
|
|
|
|
|
2023-11-08 13:11:35 +08:00
|
|
|
|
旋转xyz分别为
|
2023-10-25 17:08:15 +08:00
|
|
|
|
the "roll" about the x-axis along the plane,
|
|
|
|
|
the "pitch" about the y-axis which extends along the wings of the plane,
|
|
|
|
|
and the "yaw" or "heading" about the z-axis
|
|
|
|
|
|
|
|
|
|
# Qt
|
2023-11-08 13:11:35 +08:00
|
|
|
|
Qt中四元数旋转顺序zyx 或 yxz
|
2023-10-27 23:10:21 +08:00
|
|
|
|
旋转xyz分别为pitch yaw roll
|
2023-11-08 13:11:35 +08:00
|
|
|
|
|
|
|
|
|
# UE
|
|
|
|
|
UE中四元数的旋转顺序为**zyx**。其中旋转X轴为Roll,旋转Y轴为Pitch,旋转Z轴为Yaw
|