Rotacja kwaternionów bez kątów Eulera

Wten komentarz zdecydowanie sugerowano, że nigdy nie powinniśmy używać kątów Eulera. Rozumiem, że istnieją pewne ograniczenia dotyczące kątów Eulera, zwłaszcza blokady kardanowej, ale chciałbym poznać najlepszą technikę lub zestaw technik, z których zwykle korzysta się przy braku kątów Eulera? Większość dyskusji na ten temat polega na konwersji z kąta Eulera na kwaternion i jest to prosta rzecz. Ale jedynym sposobem, jaki kiedykolwiek przeczytałem o robieniu rotacji bez kątów Eulera, jest utworzenie kwaternionu z dwóch wektorów, jak opisano w artykule „Najkrótszy ćwiartka łuku” Stana Melaxa w „Game Programming Gems”, przy użyciu tej techniki:

template <typename T>
inline QuaternionT<T> QuaternionT<T>::CreateFromVectors(const Vector3<T>& v0, const Vector3<T>& v1)
{

    Vector3<T> c = v0.Cross(v1);
    T d = v0.Dot(v1);
    T s = std::sqrt((1 + d) * 2);

    QuaternionT<T> q;
    q.x = c.x / s;
    q.y = c.y / s;
    q.z = c.z / s;
    q.w = s / 2.0f;
    return q;
}

Czy to jest metoda określona w komentarzu połączonym?

questionAnswers(3)

yourAnswerToTheQuestion