2013-09-29 101 views
1

我已经翻阅了一些关于stackoverflow的弹跳相关问题,但是他们中没有一个似乎让我超越了我的困境。我有一个由与3D空间中的一条线相交的变换矩阵定义的乌龟游标。我想要的是旋转光标,即转换矩阵,在相交点处,以便它的新方向与反射向量匹配。我的功能将同时得到来自入射矢量V的反射矢量R以及反射线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.  ]]) 

我怎样才能变换矩阵T由R以获得正确的方向向量?我发现并使用here中的R2_vect函数从一个向量获取旋转矩阵,但是当我将它们发送到vtk进行渲染时,只有少数产生的反射显示正确。我在这里问这个问题是因为我似乎已经达到了我已经可以从我已经不稳定的线性代数中记住的极限。感谢您的任何信息。

+3

“我有一个矢量由与三维空间中的另一个矢量相交的变换矩阵定义” - 这是没有意义的。请清楚解释转换矩阵的作用。 –

+1

我不确定,矩阵是4x4,3d空间中的矢量可能有3个维度。我没有看到OP的含义 – gg349

+0

@flebool在图形编程转换中有时会写入4个组件,并在x,y,z坐标上添加一个额外的“1”,这样翻译可以包含在单独的添加中。 –

回答

0

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