Рассчитать угол оси Y между World Origin и ARCamera - PullRequest
0 голосов
/ 31 августа 2018

Прежде всего, я чувствую, что этот вопрос довольно прост, и мне просто не хватает некоторых математических знаний, такое чувство, что формула могла бы дать мне ответ, однако я нигде не могу его найти.

Я пытаюсь найти способ вычисления угла оси Y между ARCamera и World Origin.

Сначала я подумал, что могу использовать SCNNode и его свойство eulerAngles следующим образом:

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

Это объясняется чуть более подробно здесь: ScenKit eulerОтключает странные значения во время вращения

Я также знаю, что у узла есть свойство rotation, которое является ненормализованным кватернионом, и что вращение по оси Y также можно выполнить, одновременно поворачивая оси X и Z.

Есть ли способ получить угол от начала координат мира до -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");

Так что, если у кого-то есть идея о том, как это реализовать, пожалуйста, дайте мне знать.

...