Как я могу переместить SCNNode из точки A в точку B в SCNSphere - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь переместить мой 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".

...