晚上好,
我想找到一种方法来创建一个只有 2 个法向量的旋转矩阵。一个是原点向量 (0,1,0),一个是我想要将点移动到的法线。
所以理论上我必须将我的 r 矩阵乘以每个点。
我也用谷歌搜索过,我也找到了一些东西,但我认为这不是我真正想要的。
编辑:这也是针对3D空间的,图片只是为了更好地理解。
最佳答案
早上好。
假设你想写出哪个 map 的旋转
向量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
不需要是单位向量,只是不平行即可。如果范数相等,则变换是旋转。
关于python - 从 2 个法线创建旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409140/