问题标签 [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 投票
4 回答
4794 浏览

math - 用另一个四元数的偏航部分校正一个四元数的偏航部分

我有以下问题:来自运动捕捉设备的四元数 (q1) 需要通过来自第二个跟踪对象导出的另一个方向四元数 (q2) 的偏航角(并且只有偏航!)来校正,以便俯仰和滚动q1 的偏航角与之前相同,但 q1 具有 q2 的偏航角。

工作解决方案是将四元组转换为矩阵,然后进行计算以提取旋转角度,然后进行航向校正。但是,当直接在某个轴的方向上时(例如,在 0° - 359° 之后),这会导致“翻转”。还尝试了其他不方便的转换。

是否有可能直接在四元数上进行数学运算而不转换为矩阵或欧拉角(即,我可以将校正的四元数设置为跟踪对象的四元数)?

如前所述 - 校正应仅包括围绕上轴(偏航)的旋转。我没有太多关于数学课的编程可能性(不幸的是,来自 Virtools 的 VSL 脚本在这个方向上非常有限)。有人有什么建议吗?

0 投票
2 回答
2703 浏览

opengl - 将局部旋转添加到全局旋转

我尝试了许多公式和转换,但没有给我预期的结果。

场景非常简单:

3DS Max等3D软件如何将局部旋转增量“转化”为全局绝对旋转?

一个例子可以帮助你理解:3DS Max - Maya - Modo(三个都给了我相同的结果,所以我倾向于相信这个结果是正确的。)假设绝对旋转顺序为XYZ。

在这些转换之后,按照这个顺序,我查看了 World Absolute 旋转,我看到的是X:40.524 Y:-28.024 Z:-21.881

他们是如何达到这个结果的?什么样的公式?使用矩阵、欧拉角或四元数,无论如何,我怎样才能得到相同的结果?

谢谢你。

PS:一个简单的解决方案可以是使用四元数或矩阵,将局部旋转添加到全局中,然后检索绝对结果。但这并不好用,因为这样我们无法控制旋转顺序,结果总是使用公式的顺序来检索值。

0 投票
2 回答
9570 浏览

java - 这个四元数旋转代码是如何工作的?

我试图了解四元数旋转是如何工作的,我发现了这个迷你教程http://www.julapy.com/blog/2008/12/22/quaternion-rotation/但他做了一些我无法锻炼的假设,比如我怎么能“计算出围绕每个轴的旋转矢量,只需围绕轴旋转矢量。 ”以及他如何计算 angleDegreesX、angleDegreesY 和 angleDegreesZ?

有人可以提供一个可行的例子或解释吗?

0 投票
1 回答
3202 浏览

quaternions - 使用四元数旋转 3D 欧拉点以避免万向节锁定

首先,我已经做了很多谷歌搜索并检查了有关此的其他 stackoverflow 帖子,但无法获得有效的回复或工作代码片段。数学不是我的强项。

我需要一个例程来获取一个相机点(CX,CY,CZ)并将其围绕一个观察点(LX,LY,LZ)旋转三个旋转角度(RX,RY,RZ)。在某些我需要避免的情况下,使用欧拉旋转会导致万向节锁定。所以我听说过使用四元数。

我发现这可以将旋转转换为四元数 http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

这从四元数转换回欧拉 XYZ 旋转 http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm

它们似乎工作正常,但我需要知道如何使用四元数围绕 LX、LY、LZ 旋转 CX、CY、CZ,然后返回新的 CX、CY、CZ 而不会出现万向节锁定问题。

关于这方面的内容太多了,我相信一个很好的解释和代码片段不仅会帮助我,而且会在未来帮助许多其他人。

因此,如果可以,请提供帮助。非常感谢。

0 投票
1 回答
1810 浏览

c++ - 四元数旋转不起作用

我刚刚开始使用四元数,但是让一个简单的 FPS 相机使用四元数正常工作时遇到了一些烦人的困难。

基本上,每当我尝试移动鼠标时,我在屏幕上绘制的三角形就会变得疯狂,并且在屏幕上的移动速度比我看到的要快。移动键(wsad)按预期工作,直到我移动鼠标,然后一切都搞砸了。我认为问题出在轮换上,但过去几天我一直在倾注这个问题,但无济于事。

这是正在发生的事情的视频:四元数测试视频

  • 要查看鼠标输入,请从头开始观看。
  • 要查看键盘输入(前进、后退等),请跳至 0:51 秒。

仅供参考,以下是我使用的 3 个主要类:
Quaternion.h
CameraSceneNode.h
CameraSceneNode.cpp

最相关的部分是tick()(我更新旋转四元数的地方)和render()(我渲染“相机”的地方,其中包括旋转和平移场景)。

这是tick()方法:

这是render()方法:

另外,在我调用render()相机之前,我运行了这段代码:

两者tick(..)render()在我的主游戏循环中的每一帧都被调用。类中有一些函数CameraSceneNode接受运动方向和摄像机旋转的变化(即改变movement_缓冲区或xRot_yRot_)。

如果这不是足够的信息,我很抱歉。一些函数(如fillMatrix(..))是在我上面引用的 3 个 .h/.cpp 文件中定义的。我已经检查过 Quaternion 类几次,在我看来它是正确的。但是话又说回来,我使用的所有代码对我来说都是正确的,所以谁知道:S

我对此完全束手无策。如果有人能解释为什么这不起作用,我将不胜感激!

干杯

贾勒特

0 投票
3 回答
2514 浏览

delphi - 全球旋转

GLScene中,我们有三个参数(RollAngle、PitchAngle 和 TurnAngle)用于围绕局部方向旋转。在下图中,如何围绕全局方向(橙色轴)旋转立方体?

在此处输入图像描述

0 投票
2 回答
12616 浏览

quaternions - Calculate Quaternion Inverse

Hi i'm trying to figure out how to calculate the inverse of a quaternion. A code example would be awesome.

Cheers

0 投票
2 回答
2831 浏览

c# - XNA Quaternion.createFromAxisAngle

我正在 XNA 中编写一个飞行模拟器程序(类似于 Star fox 64),但我的旋转出现问题。我的想法是有一个速度矢量和位置矢量。我允许的控件使得欧拉角会引起问题,所以我想使用四元数。

我对图形渲染还不是很熟悉,但我想我可以使用 Quaternion.createFromAxisAngle(vector, roll) (roll 是围绕我的速度向量的旋转),但它不能正常工作。基本上每当我尝试旋转俯仰或偏航时,什么都没有发生。当我滚动时,它可以工作,但不像我预期的那样。这是 createFromAxisAngle 方法的正确使用吗?谢谢。

这是我的船的更新位置代码:

0 投票
2 回答
1566 浏览

math - 如何从四元数旋转计算相反的视图?

我有一个四元数旋转,通常由 4 个值描述:a b c d. 可以说它改变了 x 轴,以便我从前面看一些物体。现在我想改变这个旋转,所以我从后面看对象。所以基本上我想从前到后改变视点,但是使用这种旋转来做到这一点。

如何计算反向旋转?

0 投票
1 回答
528 浏览

animation - Opengl ES的四元数

我正在与 Opengls 合作创建一个火柴人,这似乎是一个愚蠢的问题,但是当使用四元数表示旋转时,如果希望旋转围绕原点以外的另一个点,我应该怎么做,我应该使用单位四元数吗? . 我的猜测是我可以旋转然后平移也改变旋转中心,我不会使用单位四元数。这是正确的道路吗?