Я пытаюсь переместить мой SCNNode из указанной c позиции (A) в другую (B). Оглядываясь вокруг, все предлагают добавить этот узел в helperNode (который находится в центре моей сферы), а затем повернуть его, чтобы смоделировать "орбиту" моего узла через сферу. Я пробовал множество формул / расчетов / кватернионов, но ни одна из них не работает, как ожидалось. Есть ли какая-то понятная и простая формула для извлечения вращения SCNVector4 или SCNQuaternion с двумя SCNVector3?
func makeRotationQuaternion(a: SCNVector3, b: SCNVector3) -> SCNQuaternion {
let v0 = a.normalized
let v1 = b.normalized
let c = v0.dotProduct(v1)
let axis = v0.crossProduct(v1)
let s = sqrt((1.0+c)*2.0)
let invs = 1.0/s
var ret = SCNQuaternion()
let v3 = SCNVector3(axis.x * invs, axis.y * invs, axis.z * invs)
ret.x = v3.x
ret.y = v3.y
ret.z = v3.z
ret.w = s * 0.5
return ret;
}
Это самая близкая вещь, которой я достиг, но она не работает должным образом. Я просто помещаю этот кватернион в свойство поворота "helperNode".