Как переместить SCNNode из точки A в точку B на SCNSphere
Я пытаюсь переместить свой SCNNode из одной позиции (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".