Rotação de quaternion sem ângulos de Euler

Emeste comentário foi fortemente sugerido que nunca devemos usar ângulos de Euler. Eu entendo que há alguma limitação para os ângulos de Euler, mais notadamente a trava do cardan, mas eu gostaria de conhecer a melhor técnica, ou o conjunto de técnicas, que normalmente se usa na ausência de ângulos de Euler? A maioria das discussões sobre este tópico envolve a conversão de um ângulo de Euler para um quatérnio e isso é uma coisa simples de se fazer. Mas a única maneira que eu já li sobre fazer rotação sem os ângulos de Euler é criar um quaternion a partir de dois vetores como descrito pelo artigo "The Shortest Arc Quaternion" de Stan Melax em "Game Programming Gems", usando esta técnica:

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;
}

Esse é o método mencionado no comentário vinculado?

questionAnswers(3)

yourAnswerToTheQuestion