12得票4回答
限制相机俯仰角

当我只有摄像机四元数时,如何有效地限制摄像机的俯仰角? 我是否必须将其转换为欧拉角,然后再转回四元数,还是还有其他方法?

12得票7回答
欧拉角与四元数 - 存储内部与向用户展示之间的紧张关系引起的问题?

四元数可以说是内部表示物体旋转的适当选择。它们插值简单高效,并且能够明确地表示单个方向。 然而,在用户界面中展示四元数通常不合适 - 欧拉角通常更为熟悉,其值更加直观和可预测。 欧拉角在代码层面上很复杂 - 它们需要存储旋转顺序,并使用此顺序和相关角度组成实用方向(无论是矩阵还是四元数),...

12得票5回答
四元数与数值稳定性

我正在学习单位四元数以及如何使用它们表示和组合旋转。维基百科称它们比矩阵表示更具数值稳定性,但没有给出参考。有人可以向我解释一下(最好附上一些数学推理),为什么在处理旋转时(例如OpenGL应用程序),使用单位四元数比旋转矩阵更具数值稳定性?这只是因为避免万向节锁吗?

12得票4回答
我能否在四元数中交换X、Y、Z?

我有一个坐标系,其中Y轴是向上的。我需要将其转换为Z轴向上的坐标系。我已将旋转存储在四元数中,所以我的问题是:如果我有一个四元数X,Y,Z,我能否交换Y和Z并得到Z实际是向上的结果?

12得票2回答
当我有两个方向四元数时,如何找到旋转四元数以从一个四元数旋转到另一个四元数?

我正在使用四元数来编写游戏,现在我想知道当我有两个方向四元数时,如何得到从第一个四元数q1到第二个四元数q2所需的旋转四元数。 在公式中,当我将第一个四元数旋转到另一个四元数时,我所做的是: q2 = r * q1 但现在,r是未知的。这里是否也适用代数规则?如果是这样,我最终需要将一个...

12得票4回答
如何插值旋转?

我有两个描述旋转的向量;起始旋转A和目标旋转B。如何最好地使用因子F对A进行插值以接近B? 在需要插值多个维度(即产生不可取的旋转)时,简单地对向量使用lerp无法工作。也许从旋转向量构建四元数并使用Slerp是可行的方法。但是,我如何从结果四元数中提取描述新旋转的向量呢?

11得票2回答
结合不同枢轴点的四元数

背景: 我目前正在GLSL中实现一个骨骼动画着色器,为了节省空间和复杂度,我使用四元数表示骨骼旋转,并使用带权重的四元数乘法(对每个骨骼进行)来累加每个顶点的“最终旋转”。 类似于:(伪代码,假设四元数计算按预期工作) float weights[5]; int bones[5]; ...

11得票2回答
使用四元数“观察”一个物体

所以我现在正在尝试创建一个函数,该函数将获取两个3D点A和B,并为我提供表示所需旋转的四元数,使得点A“看向”点B(如果您愿意,则点A的本地Z轴通过点B)。 我最初发现了这篇文章,其中排名第一的答案似乎为我提供了一个很好的起点。然后我实施了以下代码;不像原始答案建议的那样假设默认的(0,0,...

11得票1回答
态度变化 - 角度和轴问题 - 四元数数学

我有一个应用程序,可以在用户围绕物体行走时记录角度,同时将设备(最好是)指向物体的中心。 在用户命令下,角度会被重置-因此参考姿态会被重置。使用欧拉角会产生万向锁,所以我目前正在使用四元数,并通过以下方式计算角度:double angleFromLastPosition = acos(from...

11得票3回答
高效的C++四元数乘法使用cv::Mat

我想要将存储在cv::Mat结构中的两个四元数相乘。 我希望该函数尽可能高效。 我目前有以下代码:/** Quaternion multiplication * */ void multiplyQuaternion(const Mat& q1,const Mat& q2, ...