Math 有人能为假人推荐一些变换矩阵教程吗?

Math 有人能为假人推荐一些变换矩阵教程吗?,math,matrix,transformation,Math,Matrix,Transformation,有谁能推荐一些好的起点来理解像我这样数学能力差的傻瓜的变换矩阵吗 我愿意学习数学,我不是一个十足的白痴(我希望如此),但我发现的例子似乎需要从我所知道的到我需要知道的一个巨大的飞跃 变换不过是一个矩阵乘以一个向量来生成变换后的向量,所以如果你不理解矩阵的乘法和加法,你就走不了多远 从矩阵和线性代数开始。外面有很多书,但是根据我上面的陈述,你不需要读整本书。你不需要特征值、高斯消去法、向量空间或任何其他高级和困难的东西 你只需要知道如何扩展你所知道的矩阵乘法和加法 获取转换矩阵中的条目完全是另一回

有谁能推荐一些好的起点来理解像我这样数学能力差的傻瓜的变换矩阵吗


我愿意学习数学,我不是一个十足的白痴(我希望如此),但我发现的例子似乎需要从我所知道的到我需要知道的一个巨大的飞跃

变换不过是一个矩阵乘以一个向量来生成变换后的向量,所以如果你不理解矩阵的乘法和加法,你就走不了多远

从矩阵和线性代数开始。外面有很多书,但是根据我上面的陈述,你不需要读整本书。你不需要特征值、高斯消去法、向量空间或任何其他高级和困难的东西

你只需要知道如何扩展你所知道的矩阵乘法和加法


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

就像达菲莫指出的那样,矩阵变换只是(预)将向量(如3d点)乘以矩阵。然而,这是纯数学,有些人很难想象

理解转换矩阵的最好方法(至少对我来说)是获得一个示例代码,运行它,然后处理数字。尝试查看是否可以将对象放置得更远,或旋转45度。尝试按不同的顺序进行转换,看看结果如何

一切正常吗?好

一旦你感觉到了这一点,并且如果你有足够的勇气解决数学问题,你可以采取以下步骤:

首先,了解矩阵乘法是如何工作的。一些链接:

  • 也可以向你的朋友借高中数学课本
  • 谷歌是你的朋友
一旦你习惯了用手乘以矩阵,你就会明白为什么转换是这样写的。当你使用它们时,你最终会理解矩阵

其次,我总是建议花一个下午的时间来实现你自己的
Matrix
类,并定义一些常见的操作,比如
mul(Vector v)
transpose()
,甚至
createTranslationMatrix(float x,float y,float z)
。做一些测试,看看结果是否和你手工做的一样

如果你已经走了那么远,试着实现你自己的视角转换吧!这是我们从未欣赏过的最令人惊奇的事情。这里有一个有用的解释:


一旦您完成了实现矩阵对象这一最费力但却未得到充分重视的任务之一,您将为自己感到非常自豪。祝你好运

我编写了一个web程序,可以用来处理转换矩阵。它允许预设类型和自定义类型

或者

这应该是很容易玩的数字,并立即看到它如何影响房子的绘图。查看在线可用的代码以确定它在做什么,您应该能够理解发生了什么

如果遇到问题,请意识到3×3矩阵只是与房屋形状中的每个顶点(X&Y坐标)相乘。矩阵和顶点相乘(我们现在将其称为向量)和变换矩阵如下所示

1 0 0   1
0 1 0 * 2
0 0 1   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
左边是一个(不影响向量的幂等矩阵)和一个1,2,0的向量(假设这映射到上述程序图形中的位置X1和Y2,忽略最后的
0

可以想象成这样

1 0 0   1
0 1 0 * 2
0 0 1   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
所以,在我们的例子中,这将是

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
做那个数学,我们得到最后的向量

1
2
0
因为我们说过我们的单位矩阵不应该修改值,所以我们可以在上面看到,当得到的向量与原始向量匹配时,情况就是这样

进一步解释,考虑当你需要翻译向量时。假设我们要沿X轴平移房屋

5
像素。我们想从单位矩阵开始,但将右上角的数字改为
5
,并在向量
1
中增加一个维度(您将简要了解原因)

我们再做一次数学

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

我们之所以使用第三个值
1
,是因为在执行数学运算时,考虑了转换。如果它是
0
,它将被忽略,因为任何数字乘以
0
将导致
0

如果你仍然有问题,可以在线查看视频(例如),这有助于以更直观的方式解释问题


记住:几乎每个人都能驾驶汽车,而且几乎每个人都能学会这一点,尽管自我评估的数学理解能力很差。坚持下去:坚持是关键。祝你好运。

从应用角度看?你在构建应用程序吗?我正在努力掌握CSS3和webkits matrix3d转换。考虑到这个问题的观点数量,这个答案值得更多的投票。