线性代数变换矩阵 - 通过乘以矩阵从一个点到另一个点?

时间:2012-10-18 07:05:52

标签: c++ opengl matrix transformation linear-algebra

我只熟悉线性代数,但我正在尝试在我正在处理的图形应用上制作十字准线。

I have a point: (x,y,z)

我正试图明白这一点:

(2/(x+y),(5y+z)/(2x+2y),3)

我一直在阅读,可以通过将我的点乘以'变换矩阵'来得到我想要的点。但我不知道该怎么做。

有没有人知道如何逐步了解如何将其转移到该坐标?如果我能看到最终结果,我可以试着扭转它。

2 个答案:

答案 0 :(得分:0)

你必须添加一个齐次坐标 w ; 然后你的方程是形式的

[x,y,z,w = 1] * [4x4]矩阵= [WX,WY,WZ,W], 除以W(应该是(x + y)),你可以达到预期的结果......

所以,你必须找到一个矩阵M,它代表以下等式:

WX = 2, 
WY = 2.5y+0.5z, 
WZ = 3x+3y, 
W  = x+y

答案 1 :(得分:0)

你不能直接这样做,因为只有线性变换(http://en.wikipedia.org/wiki/Linear_map)可以用矩阵表示,而你的变换不是线性的。您可以做的是按如下方式重写转换:

(x,y,z,w)->( 2w , 5y/2+z/2 , 3x+3y )

现在是线性的,其各自的转换由下式给出:

T(x,y,z,w)=[0  0  0  2; 0  5/2  1/2  0; 3  3  0  0]*(x,y,z,w)

其中矩阵由[]和每行之间的数字给出,用';'分隔。正如您所看到的,您现在有一个线性变换,它没有给出您需要的点,但如果您在w = 1中评估变换,并且还将结果向量中的每个条目除以(x + y),那么您有你想要实现的结果。我的意思是,

(2/(x+y),(5y+z)/(2x+2y),3) = 
[1/(x+y)]*[0  0  0  2; 0  5/2  1/2  0; 3  3  0  0]*(x,y,z,w=1)

我希望这对你有用。