Задача:
Я пытаюсь вычислить угол между 3 точками с оговоркой;Мне нужно, чтобы этот угол был разбит на компоненты X и Y.
Пример:
Допустим, у нас есть точки
let startingPoint = SCNVector3(0, 0, -10)
let centerPoint = SCNVector3(0, 0, 0)
let endPoint = SCNVector3(10, 0, 0)
Этиточки выстроены в формате прямоугольного треугольника, так что первая точка находится на оси Z, в центре, а затем на оси X.
![initialGraph](https://i.stack.imgur.com/nRv3s.png)
В этом примере 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](https://i.stack.imgur.com/rCeRu.png)
И если мы используем тот же код выше, мы получим
deg = 90
deg2 = 90
, но мы должны получить
deg = 0
deg2 = 90
, потому что угол X не должен двигаться;однако угол Y изменился на 90 градусов.
Вопрос:
Как получить компоненты угла при условии 3 точки?