Euler Angles Y值受X和Z值的影响 - 如何将它们归零以获得“真实的”y值?

时间:2017-09-25 14:58:50

标签: ios swift scenekit arkit euler-angles

我想要达到的效果是从相机的pointOfView位置指出一个箭头,与x和z轴上的场景(和重力)对齐,但指向的方向与相机。它可能看起来像这样:

enter image description here

现在,我将其欧拉角xz设置为0,并将y设置为与ARSCNView.pointOfView.eulerAngles.y匹配。问题是,当我旋转设备时,eulerAngles.y最终可能会为不同的点设置相同的值。例如,面向一个方向的设备,我的eulerAngles是:

x: 2.52045, y: -0.300239, z: 3.12887

面向另一个方向,eulerAngles是:

euler angles x: -0.383826, y: -0.305686, z: -0.0239297

即使这些方向相距很远,eulerAngles仍然几乎相同。不同的xz值表示y值不表示设备面向的方向。结果,我的箭头沿着相机前进到某个点,然后开始向相反方向旋转。如何将xz值清零,以便我获得真实的y值,然后我可以使用它来定位我的箭头?

1 个答案:

答案 0 :(得分:1)

不要使用欧拉角来检测“真实”或“真实”的值。

这些值总是正确的。要使用旋转,您必须使用matricies或四元数。

记住。可以使用矩阵定义大量的“欧拉角”。

每个欧拉角相对于前一个角度。

  

SceneKit以相反的顺序应用这些旋转   组件:

               1. first roll

               2. then yaw

               3. then pitch

因此,要计算角度值,我建议计算向量及其对Oxy平面的投影。这个角度不是'欧拉'角。