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

Posted

技术标签:

【中文标题】线性代数变换矩阵 - 通过乘以矩阵从一个点到另一个点?【英文标题】:Linear Algebra Transformation Matrix - From a point to a different point by multiplying by a matrix? 【发布时间】:2012-10-18 07:05:52 【问题描述】:

我只熟悉线性代数,但我正在尝试在我正在开发的图形应用程序上做一个十字准线。

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

我正试图直截了当地说:

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

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

有没有人知道如何一步一步地让它到达那个坐标?如果我能看到最终结果,我可以尝试扭转它。

【问题讨论】:

这对我来说似乎不是线性的。 【参考方案1】:

你必须添加一个齐次坐标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

【讨论】:

作为附加说明:在 openGL 着色器中,例如您最终将在顶点着色器中传递向量 gl_Position = [xw,xy,xz,w] = Matrix*vec4(x,y,z,1.0) 并且渲染管道的固定(不可见)部分进行插值,剪裁最终分裂。【参考方案2】:

您不能直接这样做,因为只有线性变换 (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)

我希望这对你有用。

【讨论】:

除数 (x+1) 通常也由同一个矩阵计算 不仅线性变换可以用矩阵表示。其他变换,如仿射或投影变换,也可以用矩阵来描述,但在这些情况下使用笛卡尔坐标系以外的坐标系(例如齐次坐标系)。 我认为你可以使用非线性变换,但你可能需要做一些棘手的事情才能将变换变为线性。因为矩阵是线性变换,线性的东西怎么可能同时是非线性的呢?

以上是关于线性代数变换矩阵 - 通过乘以矩阵从一个点到另一个点?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解矩阵相乘的几何意义或现实意义

一个矩阵乘以一个向量有啥几何意义,麻烦说详细一点!

矩阵论(学习总结)

将矩阵化简为行最简形矩阵有啥技巧,或者一般有啥特定的步骤么?

闫令琪GAMES101笔记 变换

opencv中的仿射变换