Math 应该如何使用四元数,以及应该使用什么';它们不是用来干什么的吗?

Math 应该如何使用四元数,以及应该使用什么';它们不是用来干什么的吗?,math,3d,game-engine,spatial,quaternions,Math,3d,Game Engine,Spatial,Quaternions,我在读四元数,但很难理解它们是什么,也许更具体地说,它们不是什么。我一开始认为这是在3D空间中存储对象旋转/方向的一种更好的方法,但后来我才明白,这“只是”一种将旋转应用于对象的方法,以避免万向节锁定。但是,四元数不能也用来存储一个方向,只要它总是相对于全局世界轴 我正在从头开始编写一个3D环境。没有像零重力那样的全球“上升”。当制作类相机时(以及更高版本,任何形式的玩家/棋子,可能是任何可生成的对象),它需要一个位置和旋转/定向。是否可以/应该将此方向存储为四元数(始终相对于全局世界轴),还是

我在读四元数,但很难理解它们是什么,也许更具体地说,它们不是什么。我一开始认为这是在3D空间中存储对象旋转/方向的一种更好的方法,但后来我才明白,这“只是”一种将旋转应用于对象的方法,以避免万向节锁定。但是,四元数不能也用来存储一个方向,只要它总是相对于全局世界轴

我正在从头开始编写一个3D环境。没有像零重力那样的全球“上升”。当制作
类相机时(以及更高版本,任何形式的玩家/棋子,可能是任何可生成的对象),它需要一个位置和旋转/定向。是否可以/应该将此方向存储为四元数(始终相对于全局世界轴),还是应该为“前进方向”和“向上方向”存储两个向量

如果存储为一个四元数,我可能经常需要对它进行“解码”以获得“前进方向”,从而跟踪玩家正在看什么。但如果存储为单独的向量,我需要将其“编码”为四元数,以避免定向时万向节锁定

因为四元数只有4个浮点数,所以与使用两个矢量3(6个浮点数)相比,这节省了内存。但是,从quat转换为前向向量所需的处理可能会使值无效


还是我仍然完全误解了如何使用四元数?

对我来说,四元数是从一个坐标系到另一个坐标系的转换,具有简单的“链接规则”的优势。从这个角度来看,一个人需要一个参考系统来开始。@mikuszefski好吧,我认为在任何情况下,转换都将来自“身份”。例如,对象的方向变量在某种程度上描述了从“世界轴”到“局部轴”的旋转是的,因为您将引用固定但任意的基准。然而,如果你有
p
在系统
S
r
中将你的基础转换成
T
,那么
r p*
S
转换成
T
(只是线性转换的典型转换)或者(如果我没记错的话)在
S
的坐标系中描述
T
(我接触四元数主要是为了对齐来自不同测量设备的坐标系,测量机器人手臂的位置和方向)