热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

三维错切变换矩阵_人工智能基础直观地理解矩阵变换的意义

对线性代数理论感兴趣的朋友可以访问MIT线性代数公开课查阅(搜索LinearAlgebra)更深度的学习课程。向量是“方向”和“数量”的组合。在一个二维或三维空间里,

对线性代数理论感兴趣的朋友可以访问MIT线性代数公开课查阅(搜索LinearAlgebra)更深度的学习课程。

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

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

什么是矩阵

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

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

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

1.矩阵和向量的运算

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

69e598874bc2edbebba0c03fb652880d.png

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

eae02cd1bdf067043e5f7f2f8d4fef59.png

LinearAlgebra

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

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

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方阵,就更加明显了:

6985ffcffad298410620a8ff1ad345f4.png

LinearAlgebra

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

2.单位矩阵

接下来,我们来看一种特殊的方阵,叫做单位矩阵,这种方阵左上到右下对角线都是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的方阵来说,道理也是如此。理解了这个规律,就不难想象一个矩阵对向量空间的变化了。

3.三维空间中的坐标轴旋转

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

8cb60dd0886d272bf2a01aeb8b59af0d.png

LinearAlgebra

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

d5e1a41f5e8acf2a1c09eef67215b998.png

LinearAlgebra

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

e3b6de4caebb03ecd1e0361dbd5a8b9a.png

LinearAlgebra

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

ed398b7b95595f4e2f93fc6f1b6b3eb8.png

LinearAlgebra

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

679a60b65ad1b12bccf352fbd7c4cc1a.png

作者:蚂蚁安然

链接:https://www.jianshu.com/p/4a80162ed9c5

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。




推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文详细解析了ASP.NET 2.0中的Callback机制,不仅介绍了基本的使用方法,还深入探讨了其背后的实现原理。通过对比Atlas框架,帮助读者更好地理解和应用这一机制。 ... [详细]
author-avatar
满国风_903
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有