Угол ARKit 3D между 3 точками, разбитыми на компоненты X и Y - PullRequest
0 голосов
/ 04 февраля 2019

Задача:

Я пытаюсь вычислить угол между 3 точками с оговоркой;Мне нужно, чтобы этот угол был разбит на компоненты X и Y.

Пример:

Допустим, у нас есть точки

let startingPoint = SCNVector3(0, 0, -10)
let centerPoint = SCNVector3(0, 0, 0)
let endPoint = SCNVector3(10, 0, 0)

Этиточки выстроены в формате прямоугольного треугольника, так что первая точка находится на оси Z, в центре, а затем на оси X.

initialGraph

В этом примере X-90 degrees, Y-90 degrees;Вы можете видеть, что X повернут на 90 градусов, а Y не повернут.

Итак, используя различные другие источники SO, некоторые из которых

Угол между 3 точками в трехмерном пространстве

Как рассчитать угол изтри точки?

расчет угла между двумя точками на краю круга Swift SpriteKit

Мои ошибки:

Я решил использовать приведенный ниже код для вычисления угла X.

let v1 = CGVector(dx: Double(startingPoint.x - centerPoint.x), dy: Double(startingPoint.z - centerPoint.z))
let v2 = CGVector(dx: Double(endPoint.x - centerPoint.x), dy: Double(endPoint.z - centerPoint.z))
let angle = atan2(v2.dy, v2.dx) - atan2(v1.dy, v1.dx)
var deg = angle * CGFloat(180.0 / Double.pi)
if deg < 0 { deg += 360.0 }

и приведенный ниже код для расчета угла Y.

let v3 = CGVector(dx: Double(startingPoint.y - centerPoint.y), dy: Double(startingPoint.z - centerPoint.z))
let v4 = CGVector(dx: Double(endPoint.y - centerPoint.y), dy: Double(endPoint.z - centerPoint.z))
let angle2 = atan2(v4.dy, v4.dx) - atan2(v3.dy, v3.dx)
var deg2 = angle2 * CGFloat(180.0 / Double.pi)
if deg2 < 0 { deg2 += 360.0 }

Однако, что распечатывается в примере выше

deg = 90
deg2 = 90

Где это должно быть

deg = 90
deg2 = 0

Если мы используем случай, когда

let startingPoint = SCNVector3(0, 0, -10)
let centerPoint = SCNVector3(0, 0, 0)
let endPoint = SCNVector3(0, 10, 0)

Y-Graph

И если мы используем тот же код выше, мы получим

deg = 90
deg2 = 90

, но мы должны получить

deg = 0
deg2 = 90

, потому что угол X не должен двигаться;однако угол Y изменился на 90 градусов.

Вопрос:

Как получить компоненты угла при условии 3 точки?

...