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
Où 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?
La rotation quaternion est équivalente et comporte de nombreux exemples d'implémentation – f5r5e5d