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

javascript - 如何从欧拉角(或四元数)识别立方体的底面 - three.js

所以!

我想知道您是否可以帮助我解决一个问题:

我有一个立方体,可以在三个轴上旋转。我可以获得有关立方体旋转的信息,它是从 0 到 2PI 的三个角度的数组。

问题是:如何从这三个欧拉角中识别立方体的哪一侧在底部?

我认为完美的功能应该是这样的:

以防万一——Three.js 还允许我获得立方体的四元数。

提前感谢您的帮助

0 投票
2 回答
742 浏览

3d - 如何检查四元数是否从水平旋转超过定义的度数

我有一个四元数 q,我需要确定它是否在 X/Y 轴上旋转超过一定度数。任何简单的捷径显然是将四元转换为 x/y/z 欧拉角,然后将 x/x 值与角度限制进行比较,但我想知道是否有更清洁的方法来做到这一点。

0 投票
2 回答
6275 浏览

objective-c - SceneKit – 映射物理 360 度旋转

我很难将设备运动(传感器融合)映射到 SceneKit 节点旋转。问题的前提如下,

我有球体,相机定位在球体内,使球体的几何中心和相机节点的中心重合。我想要实现的是当我围绕一个点进行物理旋转时,运动也需要准确地映射到相机上。

实现细节如下:

我有一个节点,球体作为几何图形,是根节点的子节点。我正在使用传感器融合来获取姿态四元数,然后将它们转换为欧拉角。代码是:

转换方程来自 3D Math Primer for Graphics and Game Development。以前是参考书,没看过。但绝对在我的阅读清单上。

现在模拟 SceneKit 中的物理旋转,正在旋转包含 SCNCamera 的节点。这是 rootNode 的子节点。我正在使用 .rotation 属性来做同样的事情。这里要注意的一件事是,现在我的设备运动更新线程看起来像这样

这里需要注意的是,设备和 SceneKit 节点的欧拉角不同。链接解释了它们。

SceneKit 欧拉角

CMA姿态欧拉角

在我的理解中,两者之间的映射是这样的。

[图片]

现在我面临的问题是,在我围绕一个点进行物理旋转之前,相机的 360 度旋转已经结束。我试图通过下图来描述。

[图2]

我怀疑四元数 -> 欧拉角转换会导致错误,而四元数数学现在已经超出了我的想象。

我希望我已经提供了所有信息,如果需要更多信息,我很高兴补充。

0 投票
0 回答
1033 浏览

c# - 我们如何统一使用 Quaternion.euler 将对象旋转 360 度?

我正在 Unity 开发一个 tan-gram 游戏。我想将对象旋转 360 度,但它不起作用。我想通过网络摄像头旋转我的对象。意味着当我旋转现实世界对象时,我希望游戏对象随着现实世界对象的旋转而旋转。我正在使用标记作为现实世界的对象。它与上面的代码一起旋转。但它并不准确。它比真正的旋转更快。

0 投票
1 回答
567 浏览

3d - 将一个点和欧拉角转换为 3D 空间中的 3 个点

我有一个 3D 点和 3 个欧拉角代表一个相机姿势,比如(XYZABC),其中(X,Y,Z)是相机的 3D 位置,(A,B,C)是欧拉角(以度为单位)表示相机方向。

我想得到3分。我该怎么做?

0 投票
0 回答
1840 浏览

c++ - 关于旋转序列的四元数到欧拉角的转换

这就是我所拥有的:

  • 我有一个Vector3D表示 3D 空间中的向量或点的类。
  • 我有一个Quaternion对四元数执行微积分的类,我可以使用静态方法从角度轴表示创建一个旋转单位四元数Quaternion::fromAngleAxisRotation(double angle, Vector3D axis)
  • 我有一个EulerAngles具有 alpha、beta、gamma 角度的类,并且在构造函数中我必须指定旋转顺序,它可以是规范 12(XZX、YXZ、ZYX ecc)之一。作为私人成员,我有一个包含三个元素的数组,Vector3D用于指定旋转序列轴。即对于 ZYX 旋转我有axes[0] = Vector3D(1,0,0); axes[1] = Vector3D(0,1,0); axes[2] = Vector3D(0,0,1);。对于 XZX 旋转序列我有axes[0] = Vector3D(1,0,0); axes[1] = Vector3D(0,0,1); axes[2] = Vector3D(1,0,0);等等。
  • 该类EulerAngles有一个方法getQuaternion()。这允许计算具有三个旋转角度和旋转序列的相应四元数。为了工作,该方法Quaternion使用静态方法创建三个有序实例Quaternion::fromAngleAxisRotation以找到单个旋转角度的四元数,然后将它们相乘。这让我有一个单一的方法来计算所有十二个旋转序列中的旋转单位四元数。

    Quaternion qa = Quaternion::fromAngleAxisRotation(alpha, axes[0]); Quaternion qb = Quaternion::fromAngleAxisRotation(beta, axes[1]); Quaternion qg = Quaternion::fromAngleAxisRotation(gamma, axes[2]); return qa * qb * qg;

这就是我想要的:

我有一个Quaternion例子。我想在EulerAngles类中创建一个方法,该方法EulerAngles::setFromQuaternion(Quaternion q)允许我获取四元数(归一化等)并从中创建三个角度,同时考虑到存储在axes数组中的相同旋转序列。

使用一些数学,我可以考虑每个旋转序列组合并分别威胁它们以找到角度。但我想创建一个独特的方法,就像我在EulerAngles::getQuaternion().

有没有办法将一个单位四元数分解成角度,将旋转序列作为输入,或者我必须创建十二种不同的方法才能找到它们?

矢量3D.h

矢量3D.cpp

四元数

四元数.cpp

EulerAngles.h

EulerAngles.cpp

0 投票
0 回答
1344 浏览

math - 三.js反向旋转

我将 Object3Ds 放置在一个场景中,其坐标来自较旧的 Away3D 项目。我遇到的问题是当对象有一个负的 position.x (即在相机后面)时,旋转是相反的。

我只使用 X 和 Z 进行倾斜和旋转。

有没有办法计算相反/翻转的侧角以便翻转?

即,如果 x = 1.69,那么直接相反的值应该是多少?

这是我目前的尝试:

编辑:对此进行进一步研究,Three.js 计算角度的方式是否可能与 Away3d 不同?即这里有一个类似的问题3D rotation with Axis & Angle

这很奇怪。有些对象很好,并且与 Away3d 中的相同,有些对象处于不同的奇怪角度。

0 投票
2 回答
33838 浏览

c++ - 带有特征库的旋转矩阵的滚动俯仰和偏航

我需要从旋转矩阵中提取滚动俯仰偏航角,并且我想确保我所做的事情是正确的。

那是对的吗?因为我在这里阅读:http: //eigen.tuxfamily.org/dox/group__Geometry__Module.html#gad118fececd448d7485ffea4858775e5a

当它在描述的末尾说,其中定义了角度的间隔时,我有点困惑。

0 投票
2 回答
1497 浏览

calibration - 无需校准即可计算偏航角

假设我们有加速度计和磁力计。我想知道是否有一种方法可以在不校准磁力计的情况下计算偏航角,如果 -

  1. 相对于磁北的偏航角不需要准确;所以当设备指向磁北时,偏航角不需要为0,可以是任意度数。但偏航角需要相对于旋转准确,即当设备旋转时,偏航角的变化需要正确反映实际度数的变化。

谢谢,

0 投票
1 回答
344 浏览

ios - 用户控制的环绕球体的 SceneKit 对象在两极处的行为异常

用户控制在球体表面上移动的蛇。我将相机和蛇的头部连接到一个与可见球体大小相同的假想球体上:

用户点击两个按钮来左右旋转蛇。我使用一些基本的三角函数将这个“2D”旋转转换为它的组件,我用它来旋转每帧的 controlNode:

当在球体的大部分上移动时,这非常顺利,但在球体的两个极点(沿 y 轴),蛇的行为很奇怪。这是一个 gif,显示了球体大部分的正常运动,然后是两极的奇怪运动:

gif 太大,无法上传,所以在 imgur 上

它移动的方式就像它从杆子上反弹一样,我一辈子都无法解决它。如果有人建议以更简单的方法完成任务,将不胜感激!