gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:52 25 4
gpt4 key购买 nike

晚上好,

我想找到一种方法来创建一个只有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com