【问题标题】:Can anyone recommend some Transformation Matrix tutorials for dummies? [closed]任何人都可以为假人推荐一些转换矩阵教程吗? [关闭]
【发布时间】:2011-02-11 11:03:44
【问题描述】:

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

我愿意学习数学,而且我不是一个彻头彻尾的白痴(我希望如此),但我发现的例子似乎需要从我所知道的到我需要知道的之间的巨大飞跃。

【问题讨论】:

标签: math matrix transformation


【解决方案1】:

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

从矩阵和线性代数开始。那里有很多书,但是要意识到,根据我上面的陈述,您不需要阅读整本书。您不需要特征值或高斯消元或向量空间或任何其他高级且困难的东西。

您只需要知道如何扩展您对矩阵乘法和加法的了解。

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

【讨论】:

    【解决方案2】:

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

    理解转换矩阵的最好方法(至少对我而言)是获取一个示例代码,让它运行,然后玩弄数字。试试看你能不能把一个物体放在更远的地方,或者旋转 45 度。尝试按不同的顺序进行转换,看看结果如何。

    一切正常吗?很好。

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

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

    一旦您对手动乘以矩阵感到满意,您就会了解为什么要以这种方式编写转换。当您使用它们时,您最终会理解矩阵。

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

    如果您已经做到了这一点,请尝试实施您自己的透视转换!这是我们从未欣赏过的最令人惊奇的事情。这里有一个有用的解释:

    一旦您完成了实现矩阵对象的一项最费力但被低估的任务,您会为自己感到非常自豪。祝你好运!

    【讨论】:

      【解决方案3】:

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

      Play with it onlinegrab the source

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

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

      1 0 0   1
      0 1 0 * 2
      0 0 1   0
      

      左边是一个identity matrix(一个不影响向量的幂等矩阵)和一个1、2、0的向量(假设它映射到上面提到的程序中的位置X1和Y2并忽略最终0)。

      Matrix multiplication 可以这样可视化...

      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 中添加额外的维度(您将简要了解原因)。

      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
      

      我们再做一次数学......

      6
      2
      1
      

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

      我们创建第三个值1 的原因是在执行数学运算时考虑了翻译。如果是0,它将被忽略,因为任何数字乘以0 都会得到0

      如果您仍然遇到问题,请查看在线视频(例如this one),它可以帮助您以更直观的方式进行解释。

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

      【讨论】:

      • 考虑到这个问题的浏览量,这个答案值得更多的投票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2012-11-10
      • 2010-11-04
      • 2011-04-25
      相关资源
      最近更新 更多