2017-10-05 25 views
0

私は点の集合を持っています。そのうちの2つは、私が望む回転ベクトルを指定するために使用しています。Rodriguesベクトルを基準とした点の集合の回転

たとえば、みましょう:

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

マイ所望の回転ベクトルは次のとおりです。

x2 - x1 = [1,2,0] 

私は、その後で、ロドリゲスの回転によってこの回転に対する3D一連の点を回転させるようにしようとしています私のmetho:

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は私の非回転ベクトルですkは私の希望の回転ベクトル、thetaは私のオイラー回転角です。しかし、これはいくつかの奇妙な結果を生み出しています。私は、Pythonでこれを正しく動作させるためにユニットベクトルを指定しなければならないのかどうか分かりません。なぜなら、私のkが 'ポイント'ベクトルではありません。何かアドバイス?

+0

クォータニオン回転は等価であり、多くの実装例があります – f5r5e5d

答えて

0

あなたのクロスプロダクト用語は逆です。数式はそれを十字(k、vi)として与える。

関連する問題