Como encontrar a rotação correta de um vetor para outro?

Eu tenho dois objetos e cada objeto tem dois vetores:

vetor normalvetor

Como nesta imagem:

O vetor ativo é perpendicular ao vetor normal. Agora eu quero encontrar uma rotação única de um objeto para outro, como fazer isso?

Eu tenho um método para encontrar a rotação entre um vetor para outro, e funciona. O problema é que preciso cuidar dos dois vetores: vetor normal e vetor up. Se eu usar esse método para girar o vetor normal do objeto um para o normal do objeto dois, o vetor para cima pode estar apontando para o lado errado e eles precisam ser paralelos.

Aqui está o código para encontrar a rotação mais curta:

GE::Quat GE::Quat::fromTo(const Vector3 &v1, const Vector3 &v2)
{
    Vector3 a = Vector3::cross(v1, v2);
    Quat q;

    float dot = Vector3::dot(v1, v2);

    if ( dot >= 1 ) 
    {
        q = Quat(0,0,0,1);

    }
    else if ( dot < -0.999999 )
    {
        Vector3 axis = Vector3::cross(Vector3(1,0,0),v2);

        if (axis.length() == 0) // pick another if colinear
                axis = Vector3::cross(Vector3(0,1,0),v2);
        axis.normalize();
        q = Quat::axisToQuat(axis,180);
    }
    else
    {
        float s = sqrt( (1+dot)*2 );
        float invs = 1 / s;

        Vector3 c = Vector3::cross(v1, v2);

        q.x = c.x * invs;
        q.y = c.y * invs;
        q.z = c.z * invs;
        q.w = s * 0.5f;
    }
    q.normalize();
    return q;
}

O que devo alterar / adicionar a este código para encontrar a rotação correta?

questionAnswers(4)

yourAnswerToTheQuestion