我有一个 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)$$
对不起 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/