问题标签 [euler-angles]

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 投票
3 回答
19891 浏览

c++ - 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)

我正在编写一个程序,它加载一个包含场景描述的文件,然后使用 OpenGL 显示它。我将 GLM 用于我的所有数学运算。场景文件中的旋转以四元数格式存储。我的场景管理系统以欧拉角的形式对对象进行旋转,这些角度稍后在绘制时转换为旋转矩阵。

因此,我的加载过程采用四元数旋转,将它们转换为欧拉角以存储在我的对象类中,然后将这些欧拉角转换为旋转矩阵以进行绘制。我正在使用 glm::eulerAngles 和 glm::eulerAngleYXZ 函数(分别)来执行这两个操作。

但是,我得到的结果不正确。例如,如果我理解正确,四元数 {0.500 -0.500 0.500 0.500}(即 WXYZ)应该描述从 +Z 轴到 +Y 轴的箭头旋转。然而,当我运行程序时,我得到了指向 +X 轴的箭头。

我会假设我对四元数的理解存在一些缺陷,但我可以通过跳过中间欧拉角形式来获得预期的结果。通过使用 glm::toMat4 将四元数直接转换为旋转矩阵,我得到一个将 +Z 箭头指向 +Y 的旋转。

考虑到这两种方法看起来既简单又正确,我在协调这两种不同的输出时遇到了麻烦。为了简化我的问题,为什么这两种看似等效的方法会产生不同的结果:

0 投票
4 回答
24923 浏览

c# - Euler <=> Quaternion 之间的转换就像 Unity3d 引擎中一样

我使用了两个示例(也来自此站点),但结果与 Unity 中的结果不同。

Quaternion.Euler 和 .eulerAngles 是 Unity 函数。FromQ 不执行奇点检查,FromQ2 执行。

结果:

代码在这里: http: //pastebin.ru/eAlTHdYf

任何人都可以更正此代码吗?我需要返回与 Unity 函数返回的值相同的值的代码。

更新

这是固定代码: http: //pastebin.com/riRLRvch。两个函数(FromQ 和 ToQ)都运行良好。但我有一个奇点的问题。它无法正确检测奇点。

FromQ 不能计算出正确的结果,所以这里有奇点。(90, 50, 0) - (0.6, 0.3, -0.3, 0.6) 相同。

我只看到一种解决方案 - 将“测试”计算为 xw-yz。但我不确定这是否正确。

如何解决?

0 投票
0 回答
451 浏览

rotation - 计算沿其局部 Y 轴的两个欧拉角之间的自旋

假设我们有两个旋转的物体,欧拉角是:

两者都使用旋转顺序XYZ。当旋转为零时,本地Y-axis指向上方。

我试图在他们本地的 Spins 中有所不同Y-axis。就好像所有方向都是的底部Object 1和连接的底部之间会有一根绳子一样。绳子会旋转/扭曲多少次?Object 20,0,0

一些例子:

1个全扭

1/2 扭转

1个扭转。(想想连接到它的绳子,这也算作绳子的扭曲)

--

我一直在研究方向/旋转,它是使用它们的不同方式,比如四元数、欧拉角和轴角。我觉得我知道每个人的一般工作原理,但却错过了解决这个问题的技能。

关于如何解决这个问题的任何想法?

0 投票
1 回答
1894 浏览

matrix - 如何从其变换矩阵中获取 3D 对象的旋转角度

我有一个可以沿 x、y 和 z 轴自由旋转的 3d 对象,然后将其保存为变换矩阵。在旋转顺序未知且对象旋转超过 3 次的情况下(例如:-如果我将对象旋转 x-60 度、y-30 度、z-45 度,然后再旋转 x->30 度),是否可以提取从变换矩阵旋转的角度?我知道如果旋转序列已知,则可以获得角度,但是如果我只有最终的变换矩阵而没有其他东西,是吗可以从变换矩阵中获得旋转的角度(x、y 和 z)吗?

0 投票
1 回答
2418 浏览

matlab - 来自2x2 ZYZ旋转矩阵的欧拉角?

如何从随机 2x2 ZYZ 旋转矩阵中找到欧拉角?我们知道所有 SU(2) 矩阵都可以使用 ZYZ 分解作为基于欧拉角的三矩阵乘积进行分解。在关于欧拉角的维基百科中:

“类似的三角分解适用于 SU(2),即复杂二维空间中的特殊酉旋转群,不同之处在于 β 的范围从 0 到 2π。这些也称为欧拉角。”

我确实尝试在matlab中做一个方程系统,但它在某些情况下(泡利矩阵)找到了解决方案,而在许多其他情况下却没有。它永远不会找到随机的 SU(2) 矩阵。

有人知道一般方法吗?我已经找到了如何做 3x3 矩阵,但不是 2x2 ZYZ。

最好的祝福!

0 投票
8 回答
80413 浏览

c++ - 如何从旋转矩阵计算角度

我正在使用单个对象的两个图像,该对象从其第一个图像旋转了一定程度。

我已经计算了每个图像的 POSE,并使用 Rodergues() 将旋转矢量转换为矩阵。现在我如何计算并查看它从第一个位置旋转了多少?

我尝试了很多方法,但答案不是很接近

编辑:我的相机是固定的,只有物体在移动。

0 投票
4 回答
45077 浏览

math - 两个 3d 向量之间的欧拉角

你如何找到 2 个 3D 向量之间的 3 个欧拉角?当我有一个向量并且我想获得它的旋转时,通常可以使用此链接:计算旋转以查看 3D 点?

但是,当它们相互计算时,我该怎么做呢?

0 投票
2 回答
1669 浏览

rotation - Panda3D:如何旋转物体以使其 X 轴指向空间中的某个位置?

我有一个对象(比如fromObj)存储在 NodePath 中的 3D 点位置(比如fromPoint)。它的航向俯仰滚转 (HPR) 是(0,0,0). 我想旋转它,使其 X 轴指向toPoint空间中的另一个点。我只想计算实现这种旋转的 HPR 并将其用于其他目的。

我试过fromObj.lookAt(toPoint)了,但它的 Y 轴指向toPoint。我希望它的 X 轴指向toPoint

如何计算将旋转对象以使其X 轴指向空间中给定位置的HPR

注意:我知道 StackOverflow 上的这个问题: Calculate rotations to look at a 3D point? 但是,我正在寻找一种使用现有 Panda3D API 的解决方案,并且我想要 Panda3D HPR 格式的结果。

0 投票
0 回答
1169 浏览

javascript - JavaScript gl-matrix lib:如何从角获得欧拉角和角?

是否可以使用 gl-matrix 库?(欧拉角,我的意思是:俯仰、偏航、滚动)(https://github.com/toji/gl-matrix)在命令参考中寻找但没有发现任何有用的东西。

JavaScript 的另一种实现方式也很有用。

0 投票
1 回答
739 浏览

quaternions - 我通过反复试验得出的结论,您能解释一下原因吗?

首先,我不确定这里是否欢迎这个问题,我检查了常见问题解答并发现“我希望其他人解释”的问题是。

主要问题是我需要在我的应用程序中存储所有对象的旋转两次。这是因为一方面,我使用Bullet Physics的物理模拟存储了它的表示。另一方面,我自己存储所有对象共有的旋转,无论它们是否在物理模拟中,例如灯光、任务目标等。除了物理库之外,我还使用了GLM数学库。

我必须同步两种表示。顺便说一句,位置和规模不会造成任何问题。困难在于物理模拟任何我自己的表示都是不同的,所以我不能只是复制值。我还没有发现所有这些差异,但它可能与左手坐标系与右手坐标系、度数与弧度以及 Y 坐标向上与 Z 向上有关。

我自己的表示只是将欧拉角存储在glm::vec3向量中。由于我使用 OpenGL 进行绘图,我猜空间是右手的。对于欧拉角,顺序很重要。我计算旋转矩阵的方法是首先创建每个组件的矩阵,然后按X * Y * Z顺序将它们相乘。此外,在我自己的表示中,正 Y 坐标指向上方。

物理模拟使用四元数来存储旋转。经过一些研究,我读到了这个库中空间是左手的假设。我没有关于哪个坐标是向上的信息,也没有关于返回欧拉角的顺序的信息。

这是将旋转从物理模拟转换为我自己的表示的代码,反之亦然。

我通过反复试验发现了这个肮脏的代码,它可以工作。但正如您所看到的,通过不同的四元数类型进行否定、组件混合和类型转换。我想其中许多是不必要的,并且可以更简单地执行任务。

您能否解释一下为什么我的转换确实有效以及如何简化它们?顺便说一句,如果转换不起作用,我想看看它的外观,这是一个屏幕截图......