旋转变换矩阵以匹配反射向量

时间:2013-09-29 16:30:37

标签: python vector numpy matrix turtle-graphics

我已经查看过stackoverflow上有几个与球反弹相关的问题,但是他们似乎都没有让我超越我的困境。我有一个由变换矩阵定义的乌龟光标,它与3d空间中的一条线相交。我想要的是在交叉点旋转光标,即变换矩阵,使它的新方向与反射向量相匹配。我的函数可以从事件向量R获取反射向量V和反射线N的法线。在评估之前,我将每个规范化:

N,V=unit_vector(N),unit_vector(V)
R = -2*(np.dot(V,N))*N - V
R=unit_vector(R)

我的转换矩阵T处于一个numpy数组中:

array([[ -0.84923515,   -0.6        ,   0.        ,   3.65341878],
       [  0.52801483,  -0.84923515,   0.        ,  25.12882224],
       [  0.        ,   0.        ,   1.        ,   0.        ],
       [  0.        ,   0.        ,   0.        ,   1.        ]])

如何通过R转换T以获得正确的方向向量?我发现并使用了来自here的R2_vect函数来获取从一个向量到另一个向量的旋转矩阵,但是当我将它们发送到vtk进行渲染时,只有少数结果反射看起来是正确的。我在这里问这个问题因为我似乎已经从我已经摇摇欲坠的线性代数中达到了我能记住的极限。感谢您提供任何信息。

1 个答案:

答案 0 :(得分:0)

一些额外的研究澄清了一些事情:变换矩阵的前3列表示3个正交向量(x1, x2, x3),第4列表示给定时间间隔的光标空间坐标。最后一行不包含数据,只是保持矩阵平方。旋转向量只需要移除T的最后一行,从我列出的函数R中取出3x3旋转矩阵并旋转每个向量:R.dot(x1), R.dot(x2), R.dot(x3)然后我只需要合成值重新变成4x4矩阵。