我是游戏开发人员,没有学习数学。所以我只想使用四元数作为工具。为了能够进行3D旋转,有必要使用四元数(或矩阵,但在本问题中,我们先保留四元数)。我认为对于许多开发人员来说,使用它们很重要。这就是为什么我想分享我的知识并希望填补我的空缺。现在....
据我了解:
四元数可以描述两件事:
- 3d对象的当前方向。
- 对象可以执行的旋转变换。(rotationChange)
您可以使用四元数:
乘法:
四元数endOrientation =四元数旋转Change *四元数currentOrientation;
因此,例如:我的3D对象向左旋转90°-我乘的旋转就是向右旋转180°,最后我的3D对象90°向右旋转。
四元数rotationChange =四元数endRotation * Quaternion.Inverse(startRotation);
这样,您将获得一个rotationChange,可以将其应用于另一个方向。
Vector3 endPostion =四元数rotationChange * Vector3 currentPosition;
因此,例如:我的3D对象位于位置(0,0,0)上,并且我乘以的旋转是向右旋转180°,我的端点类似于(0,-50,0)。在四元数内部有一个轴-以及围绕该轴的旋转。您围绕该轴Y度旋转点。
Vector3 rotationOffsetVector =四元数rotationChange * Vector3 currentOffsetVector;
例如:我的开始方向显示为UP-(0,1,0),我乘以的旋转方向是向右旋转180°,我的结束方向显示为向下。(0,-1,0)
混合(Lerp和Slerp):
四元数currentOrientation =四元数.Slerp(startOrientation,endOrientation,插值器)
如果插值器为1:currentOrientation = endOrientation
如果插值器为0:currentOrientation = startOrientation
Slerp插值更精确,而Lerp插值更高效。
我的问题:
我到目前为止所解释的一切都正确吗?
四元数可以做到这一点吗?(不可以)
您还能对他们做什么?
两个四元数之间的点积和叉积有什么好处?
编辑:
更新了问题并提供了一些答案
n
方位(姿势,姿势等)不同。然后,您可以使用权重对它们进行平均,从而有效地概括slerp / lerp。您还可以将四元数转换为转子,这等效于对刚体施加一定时间的角速度。因此,您也可以描述四元数的角速度积分。您还可以估计两个方向的相异程度(计算超球面上两个四元数所跨越的弧的长度)。