首先,我觉得这个问题非常简单,我只是缺乏一些数学知识,感觉就像一个公式能够给我答案,但是我找不到任何地方。
我正在尝试找出一种计算ARCamera
和World 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轴上的旋转
是否可以使用-z
,transform
或rotation
属性获取从世界原点到相机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");
因此,如果有人对实现方法有任何想法,请告诉我。
谢谢!