Creating uniform random quaternion and multiplication of two quaternions

后端 未结 2 1542
执念已碎
执念已碎 2021-01-25 09:47

I have a python (NumPy) function which creates a uniform random quaternion. I would like to get two quaternion multiplication as 2-dimensional returned array from the same or an

相关标签:
2条回答
  • 2021-01-25 10:01

    A 2-Dimensional Array is an array like this: foo[0][1]

    You don't need to do that. Multiplying two quaternions yields one single quaternion. I don't see why you would need a two-dimensional array, or how you would even use one.

    Just have a function that takes two arrays as arguments:

    def multQuat(q1, q2):
    

    then return the relevant array.

    return array([-q2[1] * q1[1], ...])
    
    0 讨论(0)
  • 2021-01-25 10:11

    A simple rendition of your request would be:

    In [70]: def multQ(Q1,Q2):
        ...:     w0,x0,y0,z0 = Q1   # unpack
        ...:     w1,x1,y1,z1 = Q2
        ...:     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])
        ...:     
    
    In [72]: multQ(randQ(1),randQ(2))
    Out[72]: 
    [array([-0.37695449,  0.79178506]),
     array([-0.38447116,  0.22030199]),
     array([ 0.44019022,  0.56496059]),
     array([ 0.71855397,  0.07323243])]
    

    The result is a list of 4 arrays. Just wrap it in np.array() to get a 2d array:

    In [73]: M=np.array(_)
    
    In [74]: M
    Out[74]: 
    array([[-0.37695449,  0.79178506],
           [-0.38447116,  0.22030199],
           [ 0.44019022,  0.56496059],
           [ 0.71855397,  0.07323243]])
    

    I haven't tried to understand or clean up your description - just rendering it as working code.

    0 讨论(0)
提交回复
热议问题