线性代数在计算机图形学中的应用

这篇具有很好参考价值的文章主要介绍了线性代数在计算机图形学中的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章背景:本学期我学习了计算机图形学,我发现背后都是由线性代数的知识作为支撑的,于是我想把目前我了解到的一些数学知识总结出来。另外,本文在举例时主要采用计算机游戏的场景来进行举例,以更好地说明这些数学概念或公式的应用。

(本文章为课程作业)

       线性代数是计算机图形学中的基础数学理论之一,广泛应用于3D图形的建模、变换和渲染等方面。本文将介绍线性代数在计算机图形学中的常见应用以及个人的一些理解。

一.向量的基本运算

1.向量的点积

       对于一些3维的游戏来说,游戏场景中的每一个点都可以看作是三维笛卡尔坐标系中的一个坐标点,记为  ,我们假设规定游戏场景中的一点为坐标原点,那么其他的点的坐标皆可以表示为一个三维的空间向量。

       eq?%5Cmathbf%7Ba%7D%20%5Ccdot%20%5Cmathbf%7Bb%7D%20%3D%20a_1%20b_1%20+%20a_2%20b_2%20+%20a_3%20b_3%20%3D%20%7C%5Cmathbf%7Ba%7D%7C%20%7C%5Cmathbf%7Bb%7D%7C%20%5Ccos%5Ctheta  是三维空间中的点积表达式,我们可以看到点积是和两个向量之间的夹角相关的,那么根据两个向量的夹角就可以做出判定,比如说我们假设一个射击游戏的场景,一把散弹枪的射击范围是一个扇形,那么我们可以选取这把枪射击范围内的两个点,与枪的位置形成了两个向量,对这两个向量做点积,并求出其夹角,如果算出来的角度比枪械预先设置的角度还要大,那么我们就有可能判定这个玩家开挂了,他可能开了增范围的挂。

      我们还可以根据两个向量的点积来判断两个点之间的位置关系,如果这两个点和同一个点所连向量的点积越接近1,同时夹角越接近0,那么我们就可以得出这两个向量越接近,也就是终点越接近,也就是这两个点越接近,我们可以根据预先设定的一些参数,来判定这两个点的接近程度,应用到游戏场景里,可以理解为碰撞体积,也就是到达一定范围内就会视为碰撞。

2.向量的叉积

     对于叉积我们知道有,也就是说对于叉积来说,交换顺序后要添一个负号,两个向量交换后(或许可以理解为它们的终点进行了交换),产生的第三个向量的是方向相反的向量,那么我们可以根据产生向量的方向来判定两个向量的左右关系。

       我们还可以根据叉积来判断一个点在不在一个三角形内部,如下图所示。

计算机图形学线性代数,线性代数

       三角形的方向是逆时针的,从向量AB叉到向量AP叉出来的方向是+ z(这里我们规定垂直于直面向外的方向为+z,垂直于纸面向里的方向为-z),说明P点在AB的左侧(这里我们规定得到+z方向的为左侧,否则为右侧);从向量BC叉到向量BP叉出来的方向是+ z,说明P点在BC的左侧;从向量CA叉到向量CP叉出来的方向是+ z,说明P点在AC的左侧,这就说明P点在三角形的内部。因为如果不在的话那么至少存在一条边使得P点在右侧。这一原理使得我们可以在一个场景中判断一个人物在不在规定的范围内,当然游戏中的场景一般不可能只是三角形,但是我们根据这一原理,可以把判定方法推广到多边形中。

 文章来源地址https://www.toymoban.com/news/detail-766665.html

 3.向量的混合积

        在有些游戏场景中,我们需要判断一个人物先后的两次位置是否在规定的同一平面内,我们可以找这个平面内的任意不平行于这两个点所连向量(记为向量 )且线性无关的向量,并对它们做叉积,得到的结果再与进行点积,如果结果为0,那么说明该人物在规定平面内,上述计算过程其实就是混合积的计算。

二.矩阵变换

        线性变换可以看作是一个矩阵与原来的向量相乘,因此矩阵变换是通过矩阵与向量相乘的方式实现的。在计算机图形学中,常见的矩阵变换包括平移、旋转和缩放等 。

1.缩放

       缩放变换可以通过如下的矩阵来实现。

       

       实现缩放变换的矩阵是一个对角矩阵,其中元素分别表示在x轴、y轴和z轴上的变换比例,当缩放比例为负数时,会出现镜像效果,也就是物体会在相应方向上进行翻转。

2.旋转

    二维旋转矩阵的表达式为:

    

其中, 表示旋转角度,实现的效果如下图所示。

计算机图形学线性代数,线性代数

 

       这个矩阵描述了绕原点逆时针旋转角度为的变换。其中, 表示旋转角度的余弦值, 表示旋转角度的正弦值。通过对一个向量应用该矩阵,可以实现相对于原点的旋转变换。

       游戏场景中经常会有旋转的场面,但是需要特别注意的是该旋转矩阵是针对原点进行,如果需要围绕不是原点的旋转中心进行旋转,需要先进行平移变换,将旋转中心移动到原点,然后再进行旋转,最后再逆向平移回原来的位置。

       如果我们把旋转变化扩展到三维,同样可以用一个矩阵来表示旋转变换,下面我们以绕三个坐标轴旋转为例
绕 x 轴旋转的矩阵(绕 x 轴的俯仰角): 

绕 y 轴旋转的矩阵(绕 y 轴的偏航角):

绕 z 轴旋转的矩阵(绕 z 轴的滚转角):

其实我们可以观察到绕三个轴旋转的矩阵其实就是在二维矩阵上进行了一些变动,添加了一行一列,而其中只有在对角线的元素为1

三维旋转矩阵可以通过按顺序相乘这些矩阵来表示组合旋转。例如,按顺序先绕 z 轴旋转,然后绕 y 轴旋转,最后绕 x 轴旋转的组合旋转矩阵为:

这样,对一个向量应用矩阵 R,可以实现相对于原点的复合旋转变换。

3.平移

        矩阵的平移公式可以使用齐次坐标来表示。齐次坐标是一种用于表示三维空间中点和向量的坐标系统,它引入了一个额外的分量来表示平移。
对于三维平移变换,平移矩阵的表达式如下:

      其中,、 和  分别表示在 x、y 和 z 轴方向上的平移量。
       这个矩阵是一个 4x4 的矩阵,但是这并不代表这是面对4维的情况,事实上,这是由于引入了一个新的分量。除了对角线上的元素为 1 外,第四列表示平移向量。通过对一个点或向量应用平移矩阵,可以将它沿各个轴方向平移指定的距离。
       需要注意的是,在使用齐次坐标表示的情况下,点的表示是通过除以最后一个分量来获取其三维坐标,而向量的表示则应该忽略最后一个分量。

4.矩阵的一些运算法则在计算机图形学中的理解

       对于矩阵来说,一般是不满足交换律的,也就是说AB一般是不等于BA的,把这个对应到计算机图形学中很容易理解,比如说对一个图像进行处理,先旋转后缩放和先缩放后旋转得到的图像一般是不一样的。

       对于矩阵求逆的运算,我们也可以有对应的理解,假设我们对一个图像(假设这个图为矢量图)先做变换一(其对应的矩阵为矩阵A),再对这个图像做变换二(对应的矩阵为B),等于对于该矢量图中的每一个向量左乘矩阵,得到了新的图像,那么我们要将新的图像恢复为原来的图像,就应该先做变换二的逆变换,再做变换一的逆变换,这样等价于对新图像左乘矩

        那么上面的过程,其实就对应了矩阵求逆的过程

三.三维场景向二维图像的变换

         我们都知道在计算机图形学中很多场景都是立体的,但是由于计算机屏幕或者说其他屏幕看到是平面的,它们展示的也肯定是二维的图像,那么我们就需要有把三维的场景转换成二维图像的工作。

1.模型变换

       对于一个三维的物件,我们需要把它摆放到我们想要的位置,同时物体的朝向等都要调整,这里就需要用到上文矩阵变换的知识了,我们进行一系列平移、旋转、缩放的操作就可以实现模型转换的目的。

2.视角变换

        我们可以想象一下摄像机本身就有一个自己的坐标系,那么怎么计算出摄像机和物体的相对位置呢?我们可以基于这样的一个假设:如果摄像机和所有的物体一起移动的话,那么我们拍出的照片效果是一样的。

       那么我们就需要把摄像机的坐标系变换为和物体一样的坐标系,我们需要两步操作,第一步是把摄像机移到物体坐标系中的坐标原点,第二步是把摄像机的坐标系旋转为物体的坐标系,变换矩阵如下,其中右边的矩阵实现了移动的操作,而左边的矩阵实现了旋转(或者说坐标变换)的操作。

3.投影变换

        经过上述的操作后,场景仍然是三维的,我们想要把它们变成二维的,就需要进行投影变换,把三维场景投影到二维,包括正交投影,透视投影等方法。当然真实的计算机图形学中,这一过程非常复杂,进行投影后,还需要进行视口变换,光栅化等一些列过程,但是它们仍然是以矩阵和线性代数为基础内容。

            以上就是我在学习计算机图形学中总结的一些和线性代数有关的知识。

            

    

 

 

到了这里,关于线性代数在计算机图形学中的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机科学cs/电子信息ei面试准备——数学基础/线性代数复习

    目录 1. 中值定理 2. 梯度和散度 方向导数和梯度 通量与散度 3. 泰勒公式是为了解决什么问题的? 4. 矩阵的秩是什么,矩阵的秩物理意义? 矩阵的秩 矩阵秩的物理意义 5. 特征值和特征向量的概念 5.1 传统方法 例题 5.2 雅可比迭代法 6. 什么是线性相关以及线性相关的性质?

    2024年02月16日
    浏览(44)
  • 矩阵分解是计算机科学中的一个重要研究领域,涉及到向量空间理论、线性代数、密码学等领域。以下是100篇热门博客文

    作者:禅与计算机程序设计艺术 矩阵分解是计算机科学中的一个重要研究领域,涉及到向量空间理论、线性代数、密码学等领域。在机器学习和深度学习等领域中,矩阵分解被广泛应用。本文将介绍矩阵分解的相关原理、实现步骤以及应用示例。 2.1 基本概念解释 矩阵分解是

    2024年02月15日
    浏览(54)
  • 线性代数在生物信息学中的应用

    生物信息学是一门研究生物学信息的科学,它涉及到生物数据的收集、存储、处理、分析和挖掘。生物信息学的应用范围广泛,包括基因组学、蛋白质结构和功能、生物网络、生物信息数据库等方面。线性代数是一门数学分支,它研究的是向量和矩阵之间的关系和运算。线性

    2024年04月28日
    浏览(41)
  • 计算机图形学中的曲线问题——拉格朗日插值曲线绘制实践

    限于篇幅,我们将在这篇文章中介绍拉格朗日插值曲线绘制实践,主文章链接: GGN_2015 计算机图形学中的曲线问题 在主文章中我们已经介绍了拉格朗日插值函数的绘制方法。给定一个函数必须通过的点的集合,保证任意两点 x x x 指不同,我们就能构造出一条拉格朗日插值函

    2024年02月14日
    浏览(43)
  • 线性代数Python计算:矩阵对角化

    线性变换 T T T 的矩阵 A ∈ P n × n boldsymbol{A}in P^{ntimes n} A ∈ P n × n 的对角化,即寻求对角阵 Λ boldsymbol{Lambda} Λ ,使得 A boldsymbol{A} A ~ Λ boldsymbol{Lambda} Λ ,需分几步走: (1)解方程 det ⁡ ( λ I − A ) = 0 det(lambdaboldsymbol{I}-boldsymbol{A})=0 det ( λ I − A ) = 0 ,得根 λ 1 , λ

    2024年02月08日
    浏览(44)
  • 线性代数Python计算:线性方程组的最小二乘解

    给定ℝ上无解线性方程组 A x = b boldsymbol{Ax}=boldsymbol{b} Ax = b ,构造 A T A boldsymbol{A}^text{T}boldsymbol{A} A T A 及 A T b boldsymbol{A}^text{T}boldsymbol{b} A T b ,然后调用博文《线性方程组的通解》定义的mySolve函数,解方程组 A T A x = A T b boldsymbol{A}^text{T}boldsymbol{Ax}=boldsymbol{A}^text{T

    2023年04月08日
    浏览(56)
  • 计算机网络+线性代数+大学物理

    不加湘潭大学的tag,防止曝光率太高哈哈 选择题确定的是5个题,填空题确定的是2个题,简答题前两个确定,然后就没有了,2×7+6×2,26+,确实是比较难,我复习的方向和考试的方向偏差比较大 等成绩出来了我在评论区更新我的分数,下学期开始不能再考前速成了,一方

    2024年02月02日
    浏览(43)
  • [量子计算与量子信息] 2.1 线性代数

    符号对照表 量子力学中,向量使用 ∣ ψ ⟩ ket psi ∣ ψ ⟩ (ket)来表示,可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ bra psi ⟨ ψ ∣ ,可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示, ∣ 0 ⟩ ket{0} ∣ 0 ⟩ 已有了其他含义。 2.1.1 基与线性无关 向量空间中的一个

    2024年02月03日
    浏览(43)
  • 线性代数Python计算:二次型的标准形计算

    为寻求正交变换 y = P T x boldsymbol{y}=boldsymbol{P}^text{T}boldsymbol{x} y = P T x ,使得二次型 f = x T A x f=boldsymbol{x}^text{T}boldsymbol{Ax} f = x T Ax 的标准形为 f = y T Λ y f=boldsymbol{y}^text{T}boldsymbol{Lambda y} f = y T Λ y ,其中 Λ boldsymbol{Lambda} Λ 为一对角阵,只需要调用numpy.linalg的eigh函数

    2023年04月20日
    浏览(82)
  • 宋浩线性代数笔记(一)行列式的计算

            线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中;通过解析几何,线性代数得以被具体表示。线性代数

    2024年02月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包