如何理解矩阵运算

在开始ARKit的内容之前,我们还是要补充一点关于线性代数的知识。别担心,即便你觉得自己已经忘光了,理解接下来我们要讨论的话题也完全没问题。毕竟,我们的出发点并不是严谨的讨论数学,而只是把它作为一种工具,理解一下我们要使用线性代数完成哪些工作。

向量是“方向”和“数量”的组合。在一个二维或三维空间里,一个向量,表示一个具体的位置。我们可以通过向量和整数的运算,组合而成新的位置。但是,当我们要对向量存在的空间本身进行变换的时候,该怎么办呢?

这时,我们就需要一种新的数学工具,叫做矩阵。

什么是矩阵

简单来说,矩阵看起来就是一组排列起来的向量,其中向量的维数是矩阵的行,向量的个数,叫做矩阵的列。在下面的注释中,就是一个3x3的矩阵:

///
/// | 5 6 7 |
/// | 2 4 3 |
/// | 1 9 8 |
///

但是,矩阵的行和列并不一定是相同的,并且,我们管这种行列个数相同的矩阵,叫做方阵。接下来,为了尽可能简化我们讨论的范围,我们将只基于2x2和3x3这两种方阵研究矩阵的运算。当你理解了它们的含义之后,也就不难扩展到更一般的情况了。

理解矩阵和向量的运算

首先,来看方阵M和向量v相乘的运算规则,简单来说,就是先把向量v放倒,然后依次和矩阵M的每一行中的对应元素相乘并相加,每向下处理过一层,就产生一个新的结果。因此,最终相乘的结果,还是一个向量,这个向量的维数和矩阵的行数是相等的。

LinearAlgebra

例如一个3x3的方阵乘以一个三维向量,得到的结果仍旧是一个三维向量:

///
/// | 5 6 7 |   | 1 |   | 1 * 5 + 2 * 6 + 3 * 7 |
/// | 2 4 3 | x | 2 | = | 1 * 2 + 2 * 4 + 3 * 3 |
/// | 1 9 8 |   | 3 |   | 1 * 1 + 2 * 9 + 3 * 8 |
///

要注意的是,相乘的顺序,一定是方阵在前,向量在后,我们才能能到一个新的向量。如果反过来,就变成了两个矩阵相乘,它们的含义是不同的,甚至,是不能相乘的。

理解了这个计算方式之后,你可能会想,为什么要把向量和矩阵相乘呢?直接把答案说出来,就是:

为了变换向量所在的空间

为了变换向量所在的空间

为了变换向量所在的空间

重要的事情要说三遍,那么空间变换具体的含义是什么呢?我们知道,在一个二维平面里,我们可以选取两个基向量e1e2确定一个空间,在这个空间里,向量w就可以表示为5e1+2e2

LinearAlgebra

现在,假设我们要换一组基向量e3 e4表达这个2维空间,在更换的过程里,我们要让一些条件保持不变:

  • 原点位置不变;
  • 平行线变换后仍旧是平行线;
  • 直线变换后仍旧是直线;
LinearAlgebra

这样,同样是(5, 2)这个位置,在新的坐标系中,就变成了5e3+2e4,也就是说,同样的向量,在我们变换了空间之后,它就会呈现不同的样子。不难想象,利用这个特性,我们就能让图像呈现出远近、缩放等不同的视觉效果。

现在,为了量化这个变换的过程,我们把这些基向量放在一个笛卡尔坐标系中。假设,e3的坐标是(x11, y21),e4的坐标是(x12, y22),其实,我们不用管这个具体的数值是什么。这样,(5, 2)在e3 e4空间中的变换就可以写成这样:5(x11, y21) + 2(x12, y22),把这个式子做一些简单的变换就可以得到这样的结果:5x11 + 2x12 + 5y21 + 2y22,发现什么了么?如果我们把e3 e4的值写成一个2x2方阵,就更加明显了:

LinearAlgebra

没错,按照矩阵和向量乘积的运算法则,这个结果就是变换后的向量,理解了这个过程之后,我们就可以反过来理解刚才强调了三遍的结果:当我们用一个矩阵和向量相乘的时候,是为了变换向量所在的空间。

单位矩阵

接下来,我们来看一种特殊的方阵,叫做单位矩阵,这种方阵左上到右下对角线都是1,其它位置都是0。例如这样:

///
///             | 1 0 0 |
/// | 1 0 |     | 0 1 0 |
/// | 0 1 |     | 0 0 1 |
///

也就是说,在笛卡尔坐标系中,单位矩阵是由基底向量排列而成的矩阵。不难理解,这种矩阵和向量相乘的时候,不会带来任何变化。但通过它,我们可以方便的某个维度上对向量进行调整。

例如,要水平翻转平面的X轴,可以用:

///
///              | -1 0 0 |
/// | -1 0 |     |  0 1 0 |
/// |  0 1 |     |  0 0 1 |
///

要垂直翻转Y轴,可以用:

///
///             | 1  0 0 |
/// | 1 0 |     | 0 -1 0 |
/// | 0 -1 |    | 0  0 1 |
///

要让对象远离当前位置可以用:

///
///              | 0.5 0   0   |
/// | 0.5   0 |  | 0   0.5 0   |
/// | 0   0.5 |  | 0   0   0.5 |
///

如果你想不太清楚道理,试着用一个向量分别去观察下和这些方阵相乘的结果,一下子就会明白了。通过这些例子,我们不难发现,对于任意一个2x2的方阵来说,它的第一列,就是变换后(1, 0)所在的位置;而第二列,就是变换后(0, 1)所在的位置,对于3x3的方阵来说,道理也是如此。理解了这个规律,就不难想象一个矩阵对向量空间的变化了。

三维空间中的坐标轴旋转

理解了基于单位矩阵对空间进行的变换之后,我们来看个更一般情的情况,即在三维空间中按坐标轴旋转,稍后,在ARKit的例子中,我们将通过旋转坐标轴,在空间的不同位置里放置物品。例如,我们握住Z轴,让XY平面水平旋转:

LinearAlgebra

在这个过程里,由于空间的原点不变,空间的Z轴坐标也没变,因此,我们可以用一个XY平面来计算这个变换过程。假设已知点M,如何用M的坐标得到旋转β角之后N的坐标呢?我们先把它们各自的坐标写出来:

LinearAlgebra

然后,我们把cos(α+β)和rsin(α+β)展开,并做一些简单的代数运算,就可以得到用M坐标表示的N坐标:

LinearAlgebra

这样,再把XY平面放回立体空间,根据矩阵的计算规则,我们就可以得到按Z轴旋转的矩阵了:

LinearAlgebra

同理,我们也可以得到按X轴或Y轴旋转的变换矩阵。当然,我们并不需要记住这个矩阵具体的模样,稍后,我们会使用相关的函数来生成这个旋转矩阵,大家只要知道其中的道理就好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多。”,然而“按照现行的国际标准,线性代数是通过公...
    Drafei阅读 1,536评论 0 3
  • 线性代数在科学领域有很多应用的场景,如下: 矩阵,是线性代数中涉及的内容, 线性代数是用来描述状态和变化的,而矩阵...
    zhoulujun阅读 11,983评论 3 44
  • 理解矩阵一:转载自:http://blog.csdn.net/myan/article/details/64751...
    jiandanjinxin阅读 1,531评论 1 15
  • 今天,我毕业了,其实,这两个字说出来对于我来说一点意义都没有,小学生涯过完了正式结束了,也只能说是这一批人小学毕业...
    黑夜暗淡了多少承诺阅读 170评论 0 1
  • 一只鸟儿飞过来 两只鸟儿飞过来 无数只鸟儿飞过来 明静的天空,突然黑暗下来 天气预报说 今日二十四小时有雨 其实那...
    甘肃子溪阅读 420评论 0 11