繁体   English   中英

从 2 个法线创建一个旋转矩阵

[英]Create a rotation matrix from 2 normals

晚上好,

我想找到一种方法来创建一个只有 2 个法向量的旋转矩阵。 一个是原点向量 (0,1,0),一个是我想将点移动到的法线。

所以理论上我必须将我的 r 矩阵乘以每一点。

所以这张图代表了我的问题: 在此处输入图片说明

我也用谷歌搜索过,我也找到了一些东西,但我认为这不是我真正想要的。

编辑:这也适用于 3D 空间,图片只是为了更好地理解。

早上好。

假设您要编写将向量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    

请注意, UV不需要是单位向量,只是不需要平行。 如果范数相等,则转换为旋转。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM