python - 从 2 个法线创建旋转矩阵

标签 python numpy matrix rotation

晚上好,

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

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

所以这张图代表了我的问题: enter image description here

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

编辑:这也是针对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    

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

关于python - 从 2 个法线创建旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409140/

相关文章:

javascript - 如何使用 Flask 从 javascript 获取变量

r - 如何创建包含每行之间的平均绝对分数的距离矩阵?

Python - 如何使用正则表达式查找文本?

python - 如何在python子进程中由另一个用户运行文件

python - Numpy:将两个排列相乘

opengl - 给定旋转后的法向量,求平面的 OpenGL 旋转矩阵

list - 以 pythonic 方式创建列表列表

python - 用 Numpy 数组简洁地堆叠一个常量?

arrays - for 循环的简洁数学符号

python - 您如何从满足某些条件的数组中随机排除/删除元素?