任何人都可以为假人推荐一些转换矩阵教程吗?

gar*_*uan 9 math transformation matrix

任何人都可以推荐一些很好的起点来理解像我这样数学能力差的傻瓜的转化矩阵.

我愿意学习数学,而且我不是一个完全白痴(我希望),但我发现的例子似乎需要从我所知道的东西到我需要知道的东西的巨大飞跃.

ale*_*lex 18

我写了一个可以用来转换矩阵的网络程序.它允许预设类型和自定义类型.

转换矩阵程序的屏幕截图

在线玩它抓住来源.

使用数字应该很容易,并立即看到它如何影响房子绘图.查看在线提供的代码以确定它正在做什么,您应该能够了解正在发生的事情.

如果遇到问题,请认识到3×3矩阵只是乘以房屋形状中的每个顶点(X和Y坐标).矩阵乘法与顶点(我们现在将它称为向量)和变换矩阵看起来像这样......

1 0 0   1
0 1 0 * 2
0 0 1   0
Run Code Online (Sandbox Code Playgroud)

在左边是一个单位矩阵(一个不影响向量的幂等矩阵)和一个1,2,0的向量(假设这映射到上面图中提到的程序中的位置X1和Y2并忽略最后的0).

矩阵乘法可以像这样可视化......

a b c   x   a * x + b * y + c * z
d e f + y = d * x + e * y + f * z
g h i   z   g * x + h * y + i * z
Run Code Online (Sandbox Code Playgroud)

所以,在我们的例子中,那将是......

1 0 0   1   1 * 1 + 0 * 2 + 0 * 0
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 0
0 0 1   0   0 * 1 + 0 * 2 + 1 * 0
Run Code Online (Sandbox Code Playgroud)

做那个数学,我们得到最终的矢量......

1
2
0
Run Code Online (Sandbox Code Playgroud)

由于我们说我们的单位矩阵不应该修改值,我们可以在上面看到,因为结果向量与原始向量匹配.

要进一步解释,请考虑何时需要翻译矢量.假设我们想要5沿X轴按像素平移房屋.我们希望从单位矩阵开始,但是将右上角的数字更改为5并在向量中创建额外的维度1(您将简要地看到原因).

1 0 5   1   1 * 1 + 0 * 2 + 5 * 1 
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 1
0 0 1   1   0 * 1 + 0 * 2 + 1 * 1
Run Code Online (Sandbox Code Playgroud)

我们再做数学......

6
2
1
Run Code Online (Sandbox Code Playgroud)

我们可以看到第一个数字(我们坐标中的X)已沿X轴平移5.在上面链接的程序中尝试它.

我们制作第三个值的原因1是在进行数学运算时,考虑了翻译.如果是的话0,它将被忽略,因为任何数字乘以0结果0.

如果您仍然遇到问题,请在线查看视频(例如,这个视频),这有助于以更直观的方式解释它.

请记住:几乎任何人都可以驾驶汽车,而且几乎任何人都可以学习这一点,尽管任何自我评估对数学的理解都很差.坚持下去:持久性是关键.祝好运.


Xav*_* Ho 8

就像duffymo所指出的那样,矩阵变换只不过是(前)将一个向量(如3d点)乘以矩阵.然而,这是纯粹的数学,而且有些人难以想象.

理解转换矩阵(至少对我来说)的最好方法是获取示例代码,让它运行,并使用数字.尝试查看是否可以将物体放置得更远,或者旋转45度.尝试以不同的顺序进行转换,看看结果是什么.

全部工作?好.

一旦你有了这种感觉,如果你足够勇敢地解决数学问题,你可以采取以下步骤:

首先,了解矩阵乘法的工作原理.一些链接:

一旦您习惯于手动乘以矩阵,您就会感觉到为什么转换是以这种方式编写的.当你使用它们时,对矩阵的理解最终会出现在你面前.

其次,我总是建议花一个下午尝试实现自己的Matrix类,并定义一些常见的操作mul(Vector v),transpose()甚至是createTranslationMatrix(float x, float y, float z).进行一些测试,看看结果是否与您手工完成的结果相同.

如果你走得那么远,试着实现你自己的Perspective Transformation!这是我们永远不会欣赏的最令人惊奇的事情.这里有用的解释:

一旦完成了实现矩阵对象的最重要但最不受重视的任务之一,您将为自己感到骄傲.祝好运!


duf*_*ymo 6

变换只不过是一个矩阵乘以一个向量来产生变换后的向量,所以如果你不理解矩阵乘法和加法,你就不会走得太远.

从matricies和线性代数开始.那里有很多书,但是要意识到基于我上面的陈述,你不需要阅读整本书.你不需要特征值或高斯消元或向量空间或任何其他先进和困难的东西.

你只需要知道如何扩展你所知道的有关乘法和为数字添加数字的知识.

获取转换矩阵中的条目完全是另一回事.你需要一本关于数学和计算机图形学的好书.你不会在线性代数教科书中找到它.