2016-08-17 3 views
0

J'ai deux quaternions: Q1 = w0, x0, y0, z0 et Q2 = w1, x1, y1, z1. Je voudrais les multiplier en utilisant la fonction NumPy ou Python qui peut renvoyer un tableau 2-d. J'ai trouvé des pseudocodes sur Internet qui sont écrits par Christoph Gohlke pour faire ce genre de multiplication. J'ai beaucoup essayé mais je n'ai pas réussi à l'appliquer. Quelqu'un peut-il m'aider s'il vous plaît à faire ce genre de multiplication? Les pseudocodes sont ici: `Comment multiplier deux quaternions par python ou 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

Vous venez de poser hier: http://stackoverflow.com/questions/38978441/creating-uniform-random -quaternion-et-multiplication-de-deux-quaternions; commentez ou éditez votre question là-bas si ces réponses ne suffisent pas. – hpaulj

+0

@hpaulj Je pensais que les gens ne répondraient pas à la vieille question. Il m'est également arrivé personne n'a répondu à ma question à juste titre que j'ai posée hier. Veuillez ne pas le marquer comme une question en double. – Biophysics

+0

Ma réponse d'hier est fondamentalement la même que celle que vous avez acceptée ici. La seule différence est que celui-ci déplace l'étape 'np.array()' dans la fonction. Si c'est tout ce qui importait, vous auriez pu soulever cette question dans un commentaire. – hpaulj

Répondre

2

Voici un petit exemple en utilisant votre fonction:

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

J'ai déjà une fonction python qui peut créer 2 tableaux de quaternions. J'essaie maintenant de calculer leur produit en utilisant une autre fonction qui devrait retourner la sortie de multiplication. – Biophysics

+1

@Biophysics Ok, quelle partie de mon exemple n'est pas claire alors? Je pense avoir déjà répondu à votre question: «J'ai deux quaternions Q1 et Q2. Je voudrais les multiplier en utilisant la fonction NumPy ou Python qui peut renvoyer 2-d array', regardez cette ligne 'q = quaternion_multiply (q1, q2)' – BPL

+0

Oui cela fonctionne. Merci :) – Biophysics