问题标签 [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.
c++ - 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)
我正在编写一个程序,它加载一个包含场景描述的文件,然后使用 OpenGL 显示它。我将 GLM 用于我的所有数学运算。场景文件中的旋转以四元数格式存储。我的场景管理系统以欧拉角的形式对对象进行旋转,这些角度稍后在绘制时转换为旋转矩阵。
因此,我的加载过程采用四元数旋转,将它们转换为欧拉角以存储在我的对象类中,然后将这些欧拉角转换为旋转矩阵以进行绘制。我正在使用 glm::eulerAngles 和 glm::eulerAngleYXZ 函数(分别)来执行这两个操作。
但是,我得到的结果不正确。例如,如果我理解正确,四元数 {0.500 -0.500 0.500 0.500}(即 WXYZ)应该描述从 +Z 轴到 +Y 轴的箭头旋转。然而,当我运行程序时,我得到了指向 +X 轴的箭头。
我会假设我对四元数的理解存在一些缺陷,但我可以通过跳过中间欧拉角形式来获得预期的结果。通过使用 glm::toMat4 将四元数直接转换为旋转矩阵,我得到一个将 +Z 箭头指向 +Y 的旋转。
考虑到这两种方法看起来既简单又正确,我在协调这两种不同的输出时遇到了麻烦。为了简化我的问题,为什么这两种看似等效的方法会产生不同的结果:
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。但我不确定这是否正确。
如何解决?
rotation - 计算沿其局部 Y 轴的两个欧拉角之间的自旋
假设我们有两个旋转的物体,欧拉角是:
两者都使用旋转顺序XYZ
。当旋转为零时,本地Y-axis
指向上方。
我试图在他们本地的 Spins 中有所不同Y-axis
。就好像所有方向都是的底部Object 1
和连接的底部之间会有一根绳子一样。绳子会旋转/扭曲多少次?Object 2
0,0,0
一些例子:
1个全扭
1/2 扭转
1个扭转。(想想连接到它的绳子,这也算作绳子的扭曲)
--
我一直在研究方向/旋转,它是使用它们的不同方式,比如四元数、欧拉角和轴角。我觉得我知道每个人的一般工作原理,但却错过了解决这个问题的技能。
关于如何解决这个问题的任何想法?
matrix - 如何从其变换矩阵中获取 3D 对象的旋转角度
我有一个可以沿 x、y 和 z 轴自由旋转的 3d 对象,然后将其保存为变换矩阵。在旋转顺序未知且对象旋转超过 3 次的情况下(例如:-如果我将对象旋转 x-60 度、y-30 度、z-45 度,然后再旋转 x->30 度),是否可以提取从变换矩阵旋转的角度?我知道如果旋转序列已知,则可以获得角度,但是如果我只有最终的变换矩阵而没有其他东西,是吗可以从变换矩阵中获得旋转的角度(x、y 和 z)吗?
matlab - 来自2x2 ZYZ旋转矩阵的欧拉角?
如何从随机 2x2 ZYZ 旋转矩阵中找到欧拉角?我们知道所有 SU(2) 矩阵都可以使用 ZYZ 分解作为基于欧拉角的三矩阵乘积进行分解。在关于欧拉角的维基百科中:
“类似的三角分解适用于 SU(2),即复杂二维空间中的特殊酉旋转群,不同之处在于 β 的范围从 0 到 2π。这些也称为欧拉角。”
我确实尝试在matlab中做一个方程系统,但它在某些情况下(泡利矩阵)找到了解决方案,而在许多其他情况下却没有。它永远不会找到随机的 SU(2) 矩阵。
有人知道一般方法吗?我已经找到了如何做 3x3 矩阵,但不是 2x2 ZYZ。
最好的祝福!
c++ - 如何从旋转矩阵计算角度
我正在使用单个对象的两个图像,该对象从其第一个图像旋转了一定程度。
我已经计算了每个图像的 POSE,并使用 Rodergues() 将旋转矢量转换为矩阵。现在我如何计算并查看它从第一个位置旋转了多少?
我尝试了很多方法,但答案不是很接近
编辑:我的相机是固定的,只有物体在移动。
math - 两个 3d 向量之间的欧拉角
你如何找到 2 个 3D 向量之间的 3 个欧拉角?当我有一个向量并且我想获得它的旋转时,通常可以使用此链接:计算旋转以查看 3D 点?
但是,当它们相互计算时,我该怎么做呢?
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 格式的结果。
javascript - JavaScript gl-matrix lib:如何从角获得欧拉角和角?
是否可以使用 gl-matrix 库?(欧拉角,我的意思是:俯仰、偏航、滚动)(https://github.com/toji/gl-matrix)在命令参考中寻找但没有发现任何有用的东西。
JavaScript 的另一种实现方式也很有用。
quaternions - 我通过反复试验得出的结论,您能解释一下原因吗?
首先,我不确定这里是否欢迎这个问题,我检查了常见问题解答并发现“我希望其他人解释”的问题是。
主要问题是我需要在我的应用程序中存储所有对象的旋转两次。这是因为一方面,我使用Bullet Physics的物理模拟存储了它的表示。另一方面,我自己存储所有对象共有的旋转,无论它们是否在物理模拟中,例如灯光、任务目标等。除了物理库之外,我还使用了GLM数学库。
我必须同步两种表示。顺便说一句,位置和规模不会造成任何问题。困难在于物理模拟任何我自己的表示都是不同的,所以我不能只是复制值。我还没有发现所有这些差异,但它可能与左手坐标系与右手坐标系、度数与弧度以及 Y 坐标向上与 Z 向上有关。
我自己的表示只是将欧拉角存储在glm::vec3
向量中。由于我使用 OpenGL 进行绘图,我猜空间是右手的。对于欧拉角,顺序很重要。我计算旋转矩阵的方法是首先创建每个组件的矩阵,然后按X * Y * Z
顺序将它们相乘。此外,在我自己的表示中,正 Y 坐标指向上方。
物理模拟使用四元数来存储旋转。经过一些研究,我读到了这个库中空间是左手的假设。我没有关于哪个坐标是向上的信息,也没有关于返回欧拉角的顺序的信息。
这是将旋转从物理模拟转换为我自己的表示的代码,反之亦然。
我通过反复试验发现了这个肮脏的代码,它可以工作。但正如您所看到的,通过不同的四元数类型进行否定、组件混合和类型转换。我想其中许多是不必要的,并且可以更简单地执行任务。
您能否解释一下为什么我的转换确实有效以及如何简化它们?顺便说一句,如果转换不起作用,我想看看它的外观,这是一个屏幕截图......