2017-10-05 7 views
0

J'ai un ensemble de points, dont j'utilise deux pour désigner mon vecteur de rotation désiré.Rodrigues Rotation d'un ensemble de points par rapport à un vecteur

Par exemple, que:

x1 = [1,1,1] 
x2 = [2,3,1] 

Mon vecteur de rotation souhaité est:

x2 - x1 = [1,2,0] 

Je suis alors en train de tourner une série de points 3D par rapport à cette rotation par une rotation Rodrigues, avec mon métho être:

def rodriguesRotation(vi, k, theta): 
    # Accepts vector and returns rotated vector. 
    vRotated = (vi * cos(theta)) + ((np.cross(vi, k)) * sin(theta)) + (k * (np.dot(k, vi)) * (1 - cos(theta))) 
    return vRotated 

vi est mon vecteur non réorientée, k est mon vecteur de rotation désiré, et theta est mon angle de rotation d'Euler. Cependant, cela produit des résultats étranges - je ne suis pas sûr si en Python je dois désigner mes vecteurs unitaires pour que cela fonctionne correctement, et je crois que la raison pour laquelle cela ne fonctionne pas est simplement parce que mon k est un 'point' et pas un vecteur. Aucun conseil?

+0

La rotation quaternion est équivalente et comporte de nombreux exemples d'implémentation – f5r5e5d

Répondre

0

Votre terme de produit croisé est inversé. La formule le donne comme croix (k, vi).