Creación de cuaterniones aleatorios uniformes y multiplicación de dos cuaterniones.

Tengo una función python (NumPy) que crea un cuaternión aleatorio uniforme. Me gustaría obtener una multiplicación de dos cuaterniones como una matriz devuelta bidimensional de la misma u otra función. La fórmula de la multiplicación de cuaterniones en mi caso reciente es Q1 * Q2 y Q2 * Q1. Aquí,Q1=(w0, x0, y0, z0) yQ2=(w1, x1, y1, z1) Son dos cuaterniones. La salida de multiplicación de dos cuaterniones esperada (como matriz devuelta en 2-d) debe ser

return([-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])

¿Alguien puede ayudarme por favor? Mis códigos están aquí:

def randQ(N):
    #Generates a uniform random quaternion
    #James J. Kuffner 2004 
    #A random array 3xN
    s = random.rand(3,N)
    sigma1 = sqrt(1.0 - s[0])
    sigma2 = sqrt(s[0])
    theta1 = 2*pi*s[1]
    theta2 = 2*pi*s[2]
    w = cos(theta2)*sigma2
    x = sin(theta1)*sigma1
    y = cos(theta1)*sigma1
    z = sin(theta2)*sigma2
    return array([w, x, y, z])

Respuestas a la pregunta(2)

Su respuesta a la pregunta