[英]Create a rotation matrix from 2 normals
早上好。
假设您要编写将向量U
映射到向量V
的旋转。 那么W=U^V
(叉积)就是旋转轴,是一个不变量。 令M
为关联矩阵。
我们终于:
(V,W,V^W) = M.(U,W,U^W)
现在让我们编写代码:
from pylab import cross,dot,inv
def rot(U,V):
W=cross(U,V)
A=np.array([U,W,cross(U,W)]).T
B=np.array([V,W,cross(V,W)]).T
return dot(B,inv(A))
一个例子 :
In [2]: U = np.array([4, 3, 8])
Out[3]: V = np.array([1, 3, 4])
In [6]: M=rot(U,V)
In [7]: dot(M,U)
Out[7]: array([ 1., 3., 4.])
In [9]: W=cross(U,V)
In [10]: allclose(W,dot(M,W))
Out[10]: True
请注意, U
和V
不需要是单位向量,只是不需要平行。 如果范数相等,则转换为旋转。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.