python - 创建均匀随机四元数和两个四元数的乘法

标签 python numpy 2d quaternions

我有一个 python (NumPy) 函数,它创建一个统一的随机四元数。我想从同一个或另一个函数中获得两个四元数乘法作为二维返回数组。我最近的案例中的四元数乘法公式是Q1*Q2和Q2*Q1。这里,Q1=(w0, x0, y0, z0)Q2=(w1, x1, y1, z1) 是两个四元数。预期的两个四元数乘法输出(作为二维返回数组)应该是

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])

谁能帮帮我?我的代码在这里:

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])

最佳答案

我知道这个问题很老但是我发现它很有趣,为了将来引用我特此写一个答案:如果四元数没有特殊的数据类型是可取的,那么四元数可以写成实数的元组并且作为 float 组的法向量。因此,从数学上讲,基于提到的过程 here ,两个四元数 $\hat{q}_1=(w_1,\mathbf{v}_1k$ 和 $\hat{q}_2=(w_2,\mathbf{v}_2)$ 的哈密顿积为: $$\hat{q}_1\hat{q}_2=(w_1 w_2-\mathbf{v}^T_1\mathbf{v}_2, w_1\mathbf{v}_2+w_2\mathbf{v}_1+\mathbf {v}_1\times\mathbf{v}_2)$$ enter image description here

对不起 math notation that cannot be rendered in Stack Overflow . 因此在 numpy 中:

import numpy as np
q1=(w1,v1)
q2=(w2,v2)
q1q2=(w1*w2-np.matmul(v1.T,v2),w1*v2+w2*v1+np.cross(v1,v2))

关于python - 创建均匀随机四元数和两个四元数的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978441/

相关文章:

java - 有人可以向我解释线程吗?

python - Pytest 不在终端窗口中显示测试结果

python - 使用 CImg 将图像文件转换为像素 vector ?

Python:将二维二进制值数组打包到 UINT64 数组中的最快方法

python - 创建没有特定范围的数组

javascript - 在 JavaScript 中显示数百万个对象

python - 接收组播: Does TTL matter?

python - self.next = None 是如何得到l1的下一个值的?

c++ - 将 LPDIRECT3DTEXTURE9 绘制到 LPDIRECT3DSURFACE9 上

python - 检查索引是否在二维列表内 [Python]