2016-08-17 18 views
0

Q1 = w0、x0、y0、z0およびQ2 = w1、x1、y1、z1の2つの四元数を持っています。私は2次元配列を返すことができるNumPyまたはPython関数を使ってそれらを掛けたいと思います。私はこの種の乗算を行うためにChristoph Gohlkeによって書かれたインターネット上の疑似コードをいくつか見つけました。私はたくさん試しましたが、それを適用できませんでした。誰もこの種の乗算をしてください私を助けることができますか?擬似コードはここにある: `2つの四元数をpythonまたはnumpyで掛ける方法

def quaternion_multiply(quaternion1, quaternion0): 
w0, x0, y0, z0 = quaternion0 
w1, x1, y1, z1 = quaternion1 
return array([-x1*x0 - y1*y0 - z1*z0 + w1*w0, 
        x1*w0 + y1*z0 - z1*y0 + w1*x0, 
        -x1*z0 + y1*w0 + z1*x0 + w1*y0, 
        x1*y0 - y1*x0 + z1*w0 + w1*z0], dtype=float64)` 
+0

あなたは昨日、これを尋ねた:http://stackoverflow.com/questions/38978441/creating-uniform-random -quaternion-and-multiplate-of-two-quaternions;それらの答えが十分でない場合は、あなたの質問をコメントしたり編集したりしてください。 – hpaulj

+0

@hpaulj人々は古い質問に答えないと思った。私は昨日尋ねたことは誰も私の質問に正直に答えたことはないと私に起こった。それを重複した質問としてマークしないでください。 – Biophysics

+0

昨日の私の答えは、ここで受け入れたものと基本的に同じです。唯一の違いは、関数内で 'np.array()'のステップを動かすことです。それが重要なことであれば、コメントでその問題を提起することができます。 – hpaulj

答えて

2

がここにあなたの関数を使用して少し例を示します

import numpy as np 
import random 


def quaternion_multiply(quaternion1, quaternion0): 
    w0, x0, y0, z0 = quaternion0 
    w1, x1, y1, z1 = quaternion1 
    return np.array([-x1 * x0 - y1 * y0 - z1 * z0 + w1 * w0, 
        x1 * w0 + y1 * z0 - z1 * y0 + w1 * x0, 
        -x1 * z0 + y1 * w0 + z1 * x0 + w1 * y0, 
        x1 * y0 - y1 * x0 + z1 * w0 + w1 * z0], dtype=np.float64) 

N = 4 
for i in range(N): 
    q1 = np.random.rand(4) 
    q2 = np.random.rand(4) 
    q = quaternion_multiply(q1, q2) 
    print("{0} x {1} = {2}".format(q1, q2, q)) 
+0

私はクォータニオンの2つの配列を作成できるPython関数を既に持っています。私は今乗算の出力を返すべき別の関数を使って製品を計算しようとしています。 – Biophysics

+1

@Biophysicsわかりやすい私の例のどの部分ですか?私はすでに私があなたに質問したと思います。私はQ1とQ2の2つの四元数を持っています。私は2次元配列を返すことができるNumPyまたはPython関数を使ってそれらを掛けたいと思います。この行を見てください。q = quaternion_multiply(q1、q2) – BPL

+0

はい、動作します。ありがとう:) – Biophysics

関連する問題