问题标签 [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 回答
501 浏览

c - CLAPACK 或替代 C 风格四元数库中的四元数

我正在将一组空间计算移植到基本上编译和运行 C 代码的嵌入式环境。

我已经用 CBLAS 和 CLAPACK 替换了一些以前使用 VNL(一个模板化的 C++ 库,不能在新平台上工作)的线性代数函数。他们的 API(所有参数都是指针,没有模板)非常适合我正在做的事情。

然而,问题是我在 CLAPACK 用户指南中的任何地方都没有看到基于四元数的函数。我错过了一个部分并且某处有四元数支持吗?如果是这样,请指出我的功能。具体来说,我正在寻找欧拉角和 3x3 矩阵的逆、乘法和转换。

如果 CLAPACK 中没有这种支持,是否还有另一个具有类似设计特征的库来进行四元数数学运算?

0 投票
1 回答
1447 浏览

java - 四元数和使用 glMultMatrix (OpenGL) 绘图

我又遇到问题了。几天以来,我尝试在没有万向节锁的情况下用 Java 编写相机。为了解决这个问题,我尝试使用来自 OpenGL 的 Quaternions 和 glMultMatrix。我还使用“LWJGL”库,尤其是Matrix4fVector4f和四元数类。这是计算四元数的代码:

我将四元数转换为矩阵:

例如,转换后的四元数如下所示:

在此之后,我使用以下代码绘制场景:

我现在的问题是相机可能没有移动,或者移动不够,因为我只看到我的玩家模型而没有看到其他任何东西(我在玩家模型之后绘制的场景中还有另一个立方体)。

我不知道到底出了什么问题。是绘图、旋转还是转换?请帮我。

编辑:

那是我的OpenGL初始化:

任何想法有什么问题?

0 投票
1 回答
881 浏览

java - 四元数“常规旋转”在转换为轴角时会给出奇怪的值

我的自定义四元数实现似乎有问题。 下载我在 Java 中的四元数实现

当我启动这个片段时,为了查看四元数角度的演变,在 Main() 方法中:

我得到了以下结果:

那么为什么角度值首先变为 360 度然后向 0 减小?虽然我已经用 Quaternion#toAxisAngle() 方法中的公式 2*Acos(Quaternion.w) 计算了角度?也许实现还不错,那么如何计算角度以使其返回 0, 10, ...,350, 360, 0, 10, ..., 350, 360, 0, 10 等等?

最后,有没有办法计算真实角度?所以这个角度跨越值:0,10,20,30,...,360,0,10,20...?


然而,我设法在 JOGL 程序中使用它来使简单的 6 色立方体有规律地旋转,只需每次计算四元数乘法并在结果四元数上调用 toMatrix() 方法。什么有效(不要关注 JOGL 的具体实现细节):

问候

0 投票
1 回答
2579 浏览

c++ - 四元数旋转opengl

如果我制作一个quaternion代表例如玩家方向和围绕此旋转的角度的 a。因此,对于应用程序,我打算让飞机飞行。四元数将代表玩家的方向和围绕该方向的角度。

然后我的问题是如何在程序中旋转对象我是否将玩家四元数转换为矩阵然后用这个 glMultMatrix 这个?

如果这一切都很好,有人可以发布我的理论是否正确,如果不发布我应该阅读的源材料或一些关于我应该做什么的好理论。

0 投票
1 回答
225 浏览

c++ - 在OpenGL中旋转0

我正在使用四元数在 OpenGL 中旋转对象,但是我遇到了一个问题,当我从 5 度旋转到 -5 度(穿过单位平面)时,我看到我的模型旋转“很长一段路”。也就是说,它从 5 到 -5 旋转了整个 350 度,而不是整个平面的 10 度。每当我通过旋转 0 度“通过”时,围绕每个轴的旋转都会发生这种情况,我不知道如何修复它。

我的代码如下所示,其中 roll、pitch 和 yaw 代表我的对象旋转的欧拉角:

有什么建议么?

0 投票
3 回答
2919 浏览

c++ - 矩阵乘以位置、四元数和比例分量

我的部分代码通过存储 xyz 位置、xyz 比例和四元数来存储相当于 4x3 矩阵的内容。下面的代码片段:

我想将这些对象中的 2 个相乘,(就好像它是矩阵相乘一样),并且想知道是否有比将每个对象转换为矩阵更快/更好的方法,以这种方式进行相乘,然后提取结果位置,旋转并再次缩小?

0 投票
1 回答
17011 浏览

vector - 四元数的方向向量?

我有一个代表 3D 角色上臂旋转的四元数。我还有一条线应该代表该角色手臂的新位置。该线位置由两个 3D 点给出。

这是我拥有的唯一数据,我试图在 3D 包(数字符文)中调用一个方法,该方法采用 2 个方向向量并返回表示将手臂移动到新位置所需的旋转的四元数。

问题是我看到了一些奇怪的行为,好像轴被混淆了,而且它通常不正常。此外,代表 3D 家伙手臂的四元数对象(来自 3D 包)具有 W、X、Y 和 Z。X、Y 和 Z 是否代表方向向量?因为这就是我需要正确调用该函数的原因。我一直在使用它以及从我的线端点计算出的方向矢量,但正如我所说,它看起来很有趣。

如果 X、Y 和 Z 不是方向向量,如何将四元数转换为两个端点,以便计算方向向量?

0 投票
1 回答
1083 浏览

camera - 使用四元数相机时如何计算旋转?

给定一个四元数相机,当玩家可以在不同的表面法线(墙壁)上行走时,我如何计算它的旋转。

我正在开发一款允许玩家在 3D 空间中在天花板和墙壁上行走的游戏。我选择使用四元数相机系统来避免万向节锁定。给定一组 up(0,1,0)、right(1,0,0) 和 forward(0,0,1) 向量,我构造了一个四元数。玩家围绕向上矢量旋转以进行航向,围绕右侧矢量旋转以进行俯仰。

在不改变重力矢量的情况下,相机可以正常工作,并允许玩家在环境中移动,就好像它是标准的 FPS 游戏一样。

为简单起见,假设玩家可以按下一个键,该键从最近的与当前法线不同的碰撞表面抓取法线,并将其分配为新的重力向量。

不幸的是,我遇到了脑残,无法弄清楚如何从这个新的重力向量中正确获取新的上、右和前向量并将它们应用于当前的旋转四元数,或者即使这是正确的方法解决问题。如果有帮助,我的相机的移动和旋转代码如下。

0 投票
2 回答
2025 浏览

opengl - OpenGL ArcBall 旋转和动画使用插值?

在我的 OpenGL 应用程序中,我需要使用 ArcBall 旋转来使用鼠标旋转对象。

阅读这篇文章后,我意识到我必须使用四元数 - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

我在这里找到了一个易于使用的实现 - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

但我的问题是我还需要在保存的两个状态之间为我的对象设置动画。那是 -

状态(1)=(位置 X1,位置 Y1,位置 Z1,旋转 1);

状态(2)=(位置 X2,位置 Y2,位置 Z2,旋转 2);

*这些“旋转”是旋转矩阵

动画分n步完成。

类似于此视频中显示的内容 - http://www.youtube.com/watch?v=rrUCBOlJdt4

如果我对三个轴(滚动、俯仰、偏航)使用 3 个单独的角度,我可以轻松地插入角度。但是,由于 ArcBall 使用旋转矩阵,我如何插入 State 1 和 State2 之间的旋转?

有什么建议么 ?

0 投票
1 回答
965 浏览

java - 获得两个四元数的角度的问题

好的,所以我试图获得两个四元数的角度,它几乎可以完美地工作,但是它从

我无法弄清楚为什么我的生活。(注意:evec是一个旧的变量名,只是留在打印中)

无论如何,这是我的代码:

如何让它停止从 237 跳到 119 并继续上升到完整的 360?