问题标签 [quaternions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
140 浏览

math - 矩阵/四元数问题

所以我得到了两个矩阵,模型视图矩阵(应该只在 Y 轴上旋转)和一个旋转矩阵(只在 Y 轴上旋转)。

现在我需要知道投影的角度(我正在查看的视图)和旋转矩阵的角度,然后我需要根据该结果分配一个值(0 到 8 之间)。

或任何其他方式我可以将两个旋转加在一起并获得一个介于 0 和 8 之间的值。

所以基本上,如果你看 90d 而敌人走 180d,你会看到绘制的敌人的精灵是正确的。

0 投票
2 回答
10406 浏览

quaternions - 当我有两个方向四元数时,如何找到从一个到另一个所需的旋转四元数?

我在我的游戏中使用四元数,我想知道当我有两个方向四元数时,我如何获得从第一个 q1 到第二个 q2 所需的旋转四元数。我是自学的,所以我的词汇表中可能缺少明显的解决方案。

在方程式中,当我从第一个旋转到另一个时,我正在做的事情如下:q2 = r * q1

然而,现在 r 是未知数。代数规则在这里也算吗?如果是这样的话,我最终会把一个四元数除以另一个,我在互联网上找不到很好的解释。

我正在使用一个名为 game maker 的程序

0 投票
2 回答
2236 浏览

matlab - 使用 C++ 中的“engine.h”在 Matlab 中绘制四元数

我有一个使用卡尔曼滤波器的 C++ 算法。在代码中的某处预测四元数q'然后我用卡尔曼滤波器q更新四元数。

我想在 Matlab 中绘制两个图形,预测四元数和校正(更新)四元数的演变,所以我使用“engine.h”库在处理过程中向 Matlab 发送四元数信息(实际上我发送的是 4x1 矩阵) .

所以我的问题是:在 Matlab 中绘制四元数的最佳方法是什么,以便我可以直观地提取信息?单独绘制角度会更好吗?

0 投票
3 回答
1459 浏览

quaternions - 寻找更好的方法来进行四元数微分

我有一个四元数(4x1)和一个角速度向量(3x1),我调用一个函数来计算微分四元数,如本网站所述。代码如下所示:

所以现在我将微分四元数存储在 q 中,然后我通过简单地添加这个微分四元数来更新四元数。

这种方法适合预测刚性物体的运动还是有更好的方法来预测角速度的四元数?这有效,但我没有得到预期的结果。

0 投票
1 回答
1279 浏览

qt - 使用 QQuaternion 和 QSlider 进行旋转

我已经使用 QQuaternion 和 QPushButton 实现了 Objectrotation。只要按下 plus_x_button,就会激活插槽 rotate_plus_x()。分别用于减号。

现在我想用 Qslider 而不是 QPushButton 来实现这个功能。范围在 -180° 和 180° 之间但是我有一个问题是我得到奇怪的结果,因为 Qslider 的值发生了变化并且 QQuaternion expexts 一个不可更改的角度。您知道如何实现这一目标吗?我已经尝试过使用 if 语句。就像是:

不幸的是它不起作用。你有一个想法,如何实现?

谢谢

0 投票
1 回答
6538 浏览

matlab - 在 Matlab 中从四元数中获取欧拉角

我有一个四元数的 X、Y、Z 和 W 分量随着时间的推移,在 4 个分离的向量中。

我想转换为欧拉角,以便随着时间在三个不同的子图中绘制 3 个欧拉分量,所以我需要有 3 个像这样的向量

matlab中是否有一种直接的方法来获得这个(我的意思是一个输入我的4个向量并输出上述3个向量的函数)还是我必须编写一些代码来为每个时间步进行转换?提前致谢。

0 投票
9 回答
44865 浏览

matrix - 为什么四元数用于旋转?

我是一名物理学家,并且一直在学习一些编程,并且遇到过很多人使用四元数进行旋转而不是以矩阵/向量形式编写东西。

在物理学中,我们不使用四元数有很好的理由(尽管偶尔会讲述关于汉密尔顿/吉布斯等的离奇故事)。物理学要求我们的描述具有良好的分析行为(这具有精确定义的含义,但在某些相当技术性的方面,远远超出了普通入门课程中所教的内容,因此我不会详细介绍)。事实证明,四元数没有这种好的行为,所以它们没有用,而向量/矩阵有,所以我们使用它们。

然而,仅限于刚性旋转和不使用任何解析结构的描述,3D 旋转可以等效地描述任何一种方式(或其他几种方式)。

通常,我们只需要一个点 X = (x, y, z) 到一个新点 X' = (x', y', z') 的映射,并受到 X 2 = X' 2的约束。有很多事情可以做到这一点。

天真的方法是只绘制这个定义的三角形并使用三角学,或者使用点 (x, y, z) 和向量 (x, y, z) 之间的同构以及函数 f(X) = X' 和矩阵 MX = X',或使用四元数,或使用其他方法将旧向量的分量沿新向量投影出 (x, y, z) T .(a,b,c) (x',y', z') 等。

从数学的角度来看,这些描述在这个设置中都是等价的(作为一个定理)。它们都具有相同数量的自由度、相同数量的约束等。

那么为什么四元数似乎比向量更受欢迎呢?

我看到的通常原因是没有万向节锁或数字问题。

没有万向节锁的说法似乎很奇怪,因为这只是欧拉角的问题。它也只是一个坐标问题(就像极坐标中 r=0 处的奇点(雅可比失去秩)),这意味着它只是一个局部问题,可以通过切换坐标,旋转出简并来解决,或使用两个重叠的坐标系。

我对数字问题不太确定,因为我不详细了解这两个(以及任何替代方案)将如何实现。我读过重新归一化四元数比对旋转矩阵进行归一化更容易,但这仅适用于一般矩阵;旋转有额外的约束,使其变得微不足道(这些约束内置在四元数的定义中)(事实上,这必须是真的,因为它们具有相同数量的自由度)。

那么在向量或其他替代方案上使用四元数的原因是什么?

0 投票
2 回答
6549 浏览

javascript - 如何将标量乘法应用于四元数

所以,我正在将一些 c++ 转换为 javascript,我真的需要知道 D3DX 如何定义他们的四元数运算符。

标量运算 quat * 0.5f 就是这样吗?

0 投票
3 回答
20028 浏览

javascript - Three.js Object3d cylinder rotation to align to a vector

I have searched far and wide, but can't seem to figure this pretty basic thing out. I have seen other examples on stackoverflow and elsewhere from a year or two ago, but they fail to work with the latest version of Three.js.

Here is a version of what i'm working on: http://medschoolgunners.com/sandbox/3d/.

I'm trying to get the grey cone to exactly align with the unlabeled red vector. Ie. I want the tip of the cone to be exactly aligned with the vector and point out from the origin in that direction.

Here is the code I have right now:

0 投票
2 回答
931 浏览

c++ - 为什么我的相机会绕着这个数学点旋转?

当我尝试改变方向时,我的相机会围绕一个点旋转。如果我旋转我的相机,比如在 Y 轴上旋转 30 度,而不是相机向右看 30 度,相机围绕它正在看的点旋转。

现在,根据我的理解,为了移动相机,我必须将世界移动该数量的倒数。因此,如果我想在 Z 轴上移动 +1,我会在 Z 轴上平移世界 -1。因为我使用四元数来表示方向,所以我使用相机四元数的逆(因为方向总是单位四元数,我通过使用共轭而不是计算逆来优化)将世界旋转适量。

这是我将四元数转换为矩阵的方法,其中 q 是倒四元数:

之后,我设置了矩阵的平移分量:

最后,我将它乘以模型视图矩阵堆栈,然后渲染我的所有对象。我很确定这个数学是正确的,但它不会产生我期望的结果。显然,前向向量和右向向量是问题所在,所以我唯一的问题是为什么它们是错误的,如果我想得到我期望的结果,应该如何设置它们。谢谢。

编辑:我从这个人的四元数相机类中找到了解决方案。首先,我像以前一样构造一个旋转矩阵,然后我从第一列、第二列和第三列(分别为 xa、ya 和 za)中获取矩阵的列向量。然后我像这样设置矩阵的平移分量:

然后可以将生成的矩阵乘以模型视图矩阵堆栈,并且可以完美运行。