计算世界原点和ARCamera之间的Y轴角度

时间:2018-08-31 00:22:23

标签: swift matrix scenekit arkit linear

首先,我觉得这个问题非常简单,我只是缺乏一些数学知识,感觉就像一个公式能够给我答案,但是我找不到任何地方。

我正在尝试找出一种计算ARCameraWorld Origin之间的Y轴角度的方法。

起初我以为可以使用SCNNode及其eulerAngles属性,如下所示:

let node = SCNNode()
node.transform = sceneView.pointOfView!.camera.worldTransform
print(node.eulerAngles.y) // Angle given is always between [-π/2, π/2]

此处有更详细的解释:ScenKit eulerAngles strange values during rotation

我还知道该节点具有rotation属性,该属性是非规范的四元数,并且还可以通过同时旋转X轴和Z轴来完成Y轴上的旋转

是否可以使用-ztransformrotation属性获取从世界原点到相机orientation的角度?

编辑: 似乎我正在寻找的是Unity Vector3.SignedAngle函数的快速实现:https://docs.unity3d.com/ScriptReference/Vector3.SignedAngle.html

    Vector3 targetDir = target.position - transform.position;
    Vector3 forward = transform.forward;
    float angle = Vector3.SignedAngle(targetDir, forward, Vector3.up);
    if (angle < -5.0F)
        print("turn left");
    else if (angle > 5.0F)
        print("turn right");
    else
        print("forward");

因此,如果有人对实现方法有任何想法,请告诉我。

谢谢!

0 个答案:

没有答案