图形学初识--矩阵和向量

文章目录

  • 前言
  • 正文
    • 向量
      • 什么是向量?
      • 向量涉及哪些常见计算?
        • 1、取模
        • 2、归一化
        • 3、向量加法
        • 4、向量减法
        • 5、向量与标量乘
        • 6、向量点乘(内积)
        • 7、向量投影
      • 向量有哪些基本应用?
    • 矩阵
      • 什么是矩阵?
      • 矩阵涉及哪些常见计算?
        • 1、矩阵加法
        • 2、矩阵减法
        • 3、矩阵乘法
        • 4、矩阵和向量乘法
      • 矩阵有哪些基本应用?
  • 结尾:喜欢的小伙伴可以点点关注+赞哦

前言

前面发布的【图形学初识】系列文章,坐标基本上都指代屏幕空间的二维坐标,迟迟没有进入真正的3维世界。为了真正进入三维世界,就需要存在一种工具将三维坐标映射为二维坐标,这个工具就涉及到数学中的线性代数中的一些概念,如:矩阵、向量、行列式等等!本章节就针对这些概念和相关计算做说明!

正文

向量

什么是向量?

概念:向量的相对概念是标量,以下是两者的对比:

向量: 既有大小,又有方向;

标量: 只有大小,没有方向;

举个例子:

向量: 速度、加速度、力等

标量: 颜色、温度、质量等

基本表示: a ⃗ = A B ⃗ = B − A \vec{a} = \vec{AB} = B - A a =AB =BA 。一个不太准确,但又十分形象的图形表示如下图:

在这里插入图片描述

a ⃗ \vec{a} a 大小:AB之间的距离

a ⃗ \vec{a} a 的方向:A指向B的这个方向

三维空间下,假设 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) A = (x_0, y_0, z_0),B = (x_1, y_1, z_1) A=(x0,y0,z0)B=(x1,y1,z1),则 A B ⃗ = B − A = ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) \vec{AB} = B - A = (x_1 - x_0, y_1 - y_0, z_1 - z_0) AB =BA=(x1x0,y1y0,z1z0)

本质上,上述的坐标表示法,其实是针对三维空间正交向量基的i、j、k的加权组合,但是因为目前还没有讲向量乘法、向量加法,所以没法解释,可以直观的认为就是这样做!

向量涉及哪些常见计算?

1、取模

假设 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ⃗ = ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0,y0,z0)B=(x1,y1,z1),AB =(x1x0,y1y0,z1z0),记 ∥ A B ⃗ ∥ \|\vec{AB}\| AB A B ⃗ \vec{AB} AB 模,本质就是向量的长度

计算公式如下:
∥ A B ⃗ ∥ = ( x 1 − x 0 ) 2 + ( y 1 − y 0 ) 2 + ( z 1 − z 0 ) 2 \|\vec{AB}\| = \sqrt{(x_1-x_0)^2 + (y_1-y_0)^2 + (z_1-z_0)^2} AB =(x1x0)2+(y1y0)2+(z1z0)2

2、归一化

假设 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ⃗ = ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0,y0,z0)B=(x1,y1,z1),AB =(x1x0,y1y0,z1z0),记 A B ^ \hat{AB} AB^ A B ⃗ \vec{AB} AB 的归一化向量

归一化本质:计算一个方向不变,长度变为1的对应向量

计算公式如下:
A B ^ = A B ⃗ ∥ A B ⃗ ∥ \hat{AB} = \frac{\vec{AB}}{\|\vec{AB}\|} AB^=AB AB

3、向量加法

假设 a ⃗ = ( x 0 , y 0 , z 0 ) , b ⃗ = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0,y0,z0)b =(x1,y1,z1) 那么 c ⃗ = a + b ⃗ = ( x 1 + x 0 , y 1 + y 0 , z 1 + z 0 ) \vec{c} = \vec{a + b} = (x_1+x_0,y_1+y_0,z_1+z_0) c =a+b =(x1+x0,y1+y0,z1+z0)

代数解释:对应坐标相加

几何解释:

(1)两向量移动到统一起点,构成平行四边形,副对角线即为加和结果

在这里插入图片描述

(2)把b向量移动到a向量的末尾,从a起点连接b终点,得到的向量即为加和结果

在这里插入图片描述

4、向量减法

假设 a ⃗ = ( x 0 , y 0 , z 0 ) , b ⃗ = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0,y0,z0)b =(x1,y1,z1) 那么 c ⃗ = b − a ⃗ = ( x 1 − x 0 , y 1 − y 0 , z 1 − z 0 ) \vec{c} = \vec{b - a} = (x_1-x_0,y_1-y_0,z_1-z_0) c =ba =(x1x0,y1y0,z1z0)

代数解释:对应坐标相减

几何解释:向量a的末端连接向量b末端的一个新向量

在这里插入图片描述

5、向量与标量乘

假设 a ⃗ = ( x 0 , y 0 , z 0 ) \vec{a} = (x_0,y_0,z_0) a =(x0,y0,z0) 那么 c ⃗ = k a ⃗ = ( k x 0 , k y 0 , k z 0 ) \vec{c} = k\vec{a} = (kx_0,ky_0,kz_0) c =ka =(kx0,ky0,kz0)

代数解释:对应坐标乘标量k

几何解释:当 k   ! = 0 k\ !=0 k !=0,向量等比例调整长度,k为缩放比例

在这里插入图片描述

6、向量点乘(内积)

假设 a ⃗ = ( x 0 , y 0 , z 0 ) , b ⃗ = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0,y0,z0)b =(x1,y1,z1) 那么记点乘 c ⃗ = a ⃗ ⋅ b ⃗ = x 1 x 0 + y 1 y 0 + z 1 z 0 \vec{c} = \vec{a} \cdot \vec{b} = x_1x_0 + y_1y_0+z_1z_0 c =a b =x1x0+y1y0+z1z0​​

注意:点乘的结果是一个标量

代数解释:对应坐标相乘然后相加

几何解释: a ^ ⋅ b ^ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ cos ⁡ θ \hat a \cdot \hat b = \|\vec{a}\|\|\vec{b}\|\cos \theta a^b^=a ∥∥b cosθ, 如下图所示

在这里插入图片描述

7、向量投影

假设 a ⃗ = ( x 0 , y 0 , z 0 ) , b ⃗ = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0,y0,z0)b =(x1,y1,z1) 那么记 a ⃗ \vec a a b ⃗ \vec b b 上的投影为 a p r j b ⃗ \vec{a_{prjb}} aprjb ​ ,计算公式如下:

在这里插入图片描述

a p r j b ⃗ = b ^ ∗ ∥ a ⊥ ⃗ ∥ = b ⃗ ∥ b ⃗ ∥ ∗ cos ⁡ θ ∗ ∥ a ⃗ ∥ = b ⃗ ∥ b ⃗ ∥ ∗ a ⃗ ⋅ b ⃗ ∥ a ⃗ ∥ ∥ b ⃗ ∥ ∗ ∥ a ⃗ ∥ = a ⃗ ⋅ b ⃗ ∥ b ⃗ ∥ 2 b ⃗ \begin{align} \vec{a_{prjb}} &= \hat b * \|\vec{a_{\perp}}\|\\ &=\frac{\vec b}{\|\vec b\|} * \cos \theta * \|\vec a\|\\ &=\frac{\vec b}{\|\vec b\|} * \frac{\vec a \cdot \vec b}{\|\vec a\| \|\vec b\|} * \|\vec a\|\\ &=\frac{\vec a \cdot \vec b}{\|\vec b\|^2}\vec b \end{align} aprjb =b^a =b b cosθa =b b a ∥∥b a b a =b 2a b b

假设被投影的向量为单位向量,则结果可以简化: a p r j b ⃗ = ( a ⃗ ⋅ b ⃗ )   b ⃗ \vec{a_{prjb}} = (\vec a \cdot \vec b)\ \vec b aprjb =(a b ) b

向量有哪些基本应用?

(1)判断两向量是否同向(重要)

在这里插入图片描述

利用向量点乘的结果判断,如果结果为负数,则不是同向,如果结果为正数,则同向。

(2)计算投影

​ 略(上述已给出计算公式)

(3)计算夹角

​ 略(也是利用点乘,计算 cos ⁡ θ \cos \theta cosθ,从而计算出夹角)

矩阵

什么是矩阵?

矩阵本质就是一个二维数组,有行、有列,其中存储许多数字,每个数字叫做矩阵的元素。第i行、j列的记作 a i j a_{ij} aij,当行和列相等时,我们叫做方阵!

如下图就是3x3的方阵,,我们常记作矩阵为 M M M
[ 10 12 30 − 1 3 0 2 96 123 ] \begin{bmatrix} 10 & 12 & 30 \\ -1 & 3 & 0 \\ 2 & 96 & 123\\ \end{bmatrix} 101212396300123

当方阵的只有主对角线元素为1,其余所有元素为0,我们记矩阵为单位矩阵,记 I n I_n In,如下图:
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} 100010001

矩阵涉及哪些常见计算?

1、矩阵加法

前提:两矩阵行列数相同

计算规则:对应元素相加

2、矩阵减法

前提:两矩阵行列数相同

计算规则:对应元素相减

3、矩阵乘法

前提:矩阵 A A A 左乘矩阵 B B B ,要求A的列数与B的行数相同

计算规则:假设矩阵 C C C 的每个元素为 c i j c_{ij} cij ,矩阵 A A A的每个元素为 a i j a_{ij} aij ,矩阵 B B B的每个元素为 b i j b_{ij} bij ,如果 C = A B C = AB C=AB

C C C的每个元素:
c i j = ( a i 0 a i 1 a i 2 . . . a i n ) ⋅ ( b 0 j b 1 j b 2 j . . . b n j ) c_{ij} = \begin{pmatrix} a_{i0}\\ a_{i1}\\ a_{i2}\\ ...\\ a_{in}\\ \end{pmatrix} \cdot \begin{pmatrix} b_{0j}\\ b_{1j}\\ b_{2j}\\ ...\\ b_{nj}\\ \end{pmatrix} cij= ai0ai1ai2...ain b0jb1jb2j...bnj
给个示例图:

在这里插入图片描述

几个常见的乘法性质:

( A B ) C = A ( B C ) A ( B + C ) = A B + A C ( A + B ) C = A C + B C (AB)C = A(BC)\\ A(B+C) = AB + AC\\ (A+B)C = AC + BC (AB)C=A(BC)A(B+C)=AB+AC(A+B)C=AC+BC

注意: 矩阵乘法没有交换律,一般来说: A B   ! = B A AB\ != BA AB !=BA

4、矩阵和向量乘法

我们可以将向量理解为列或者行为1的矩阵,这样问题就转化为矩阵的乘法类似,不多赘述!

如下图:

在这里插入图片描述

矩阵有哪些基本应用?

无所不能,在图形学领域最重要的概念就是MVP变换,本质上就是对应三个矩阵!这方面内容会在后面章节详细讲解哦!大家拭目以待!

结尾:喜欢的小伙伴可以点点关注+赞哦

希望对各位小伙伴能够有所帮助哦,永远在学习的道路上伴你而行, 我是航火火,火一般的男人!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】冒泡排序、直接插入排序、希尔排序详解!

文章目录 1. 冒泡排序🍎2. 直接插入排序🍎3. 希尔排序(缩小增量排序)🍎 1. 冒泡排序🍎 🐧 基本思想: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 大的数据…

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库(Repository)是集中存放镜像的地方,又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候,它实际上是从registry.docker.com这个地址去查找,这就是Docker公…

基于稀疏辅助信号平滑的心电信号降噪方法(Matlab R2021B)

基于形态成分分析理论(MCA)的稀疏辅助信号分解方法是由信号的形态多样性来分解信号中添加性的混合信号成分,它最早被应用在图像处理领域,后来被引入到一维信号的处理中。 在基于MCA稀疏辅助的信号分析模型中,总变差方…

交互设计如何助力传统技艺在当代复兴?

背景介绍 榫卯是中国传统木工中一种独特的接合技术,它通过构件间的凸凹部分相互配合来实现两个或多个构件的紧密结合。这种结构方式不依赖于钉子或其他金属连接件,而是利用木材自身的特性,通过精巧的设计和工艺,实现构件间的稳定…

【MAC】Spring Boot 集成OpenLDAP(含本地嵌入式服务器方式)

目录 一、添加springboot ldap依赖: 二、本地嵌入式服务器模式 1.yml配置 2.创建数据库文件:.ldif 3.实体类 4.测试工具类 5.执行测试 三、正常连接服务器模式 1.yml配置 2.连接LDAP服务器配置类,初始化连接,创建LdapTem…

Android framework修改,禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)

文章目录 Android framework修改,禁止指定包名的apk安装到设备上(基于Android10.0.0-r41)1.新增接口提供给上层调用2.在pms中实现新增的接口3.找到preparePackageLI方法。4.测试验证 Android framework修改,禁止指定包名的apk安装到设备上(基于Android10…

如何利用短链接巧妙避开多渠道推广大坑

在当下,推广渠道多样化对企业来说,那可是机遇与大坑并存!多渠道推广的重要性大家都懂,但为啥说有坑呢?一旦企业开启多渠道推广模式,就得面对大量人力物力的投入,可要是区分不了各个渠道的推广效…

超详细介绍基于微调 Faster R-CNN实现海上航拍图像中检测小物体-含源码与数据集免费下载

在航拍图像中检测小物体,尤其是对于海上救援等关键应用而言,是一项独特的挑战。及时检测水中的人可能意味着生死之间的差别。我们的研究重点是微调 Faster R-CNN(一种强大的两阶段物体检测器),以满足这一重要需求。 我们研究的核心是SeaDroneSee 数据集,这是一组重要的图…

【NumPy】全面解析add函数:高效数组加法操作

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

源达投顾的投资建议可不可信?

在金融投资领域,专业的投资顾问机构如源达投顾,为投资者提供了宝贵的投资建议和策略。然而,面对市场上众多的投资顾问机构,投资者往往会产生疑问:源达投顾的投资建议真的可信吗? 一、专业团队背景 源达投…

MSC Apex压力容器应力线性化的应用方法

应力线性化是针对压力容器设计常用的一种技术。在工程领域,应力线性化在分析复杂载荷条件下构件的结构完整性方面起着至关重要的作用。准确的应力线性化对于评估是否符合行业标准(如美国机械工程师协会(ASME)制定的标准)至关重要。为了简化应力线性化的过程&#xf…

HTML+CSS+JS简易计算器

HTMLCSSJS简易计算器 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简易计算器</t…

探索Django 5: 从零开始,打造你的第一个Web应用

今天我们将一起探索 Django 5&#xff0c;一个备受开发者喜爱的 Python Web 框架。我们会了解 Django 5 的简介&#xff0c;新特性&#xff0c;如何安装 Django&#xff0c;以及用 Django 编写一个简单的 “Hello, World” 网站。最后&#xff0c;我会推荐一本与 Django 5 相关…

JAVAEE之多线程进阶(2)_ CAS概念、实现原理、ABA问题及解决方案

前言 在并发编程时&#xff0c;常常会出现线程安全问题&#xff0c;那么如何保证原子性呢&#xff1f;常用的方法就是加锁。在Java语言中可以使用 Synchronized和CAS实现加锁效果。  Synchronized关键字保证同步的&#xff0c;这会导致有锁&#xff0c;但是锁机制存在以下问题…

慧尔智联携纷享销客启动CRM项目 推进客户经营升级与内外高效协作

智慧农业领军企业慧尔智联携手纷享销客&#xff0c;启动CRM客户经营管理系统项目。双方将深入合作&#xff0c;全面落实慧尔智联发展策略&#xff0c;持续提升数字化经营管理水平&#xff0c;实现内部团队信息化高效协作&#xff0c;以快速响应市场需求&#xff0c;提升客户满意…

竹云董事长在第二届ICT技术发展与企业数字化转型高峰论坛作主题演讲

5月25日&#xff0c;由中国服务贸易协会指导&#xff0c;中国服务贸易协会信息技术服务委员会主办的 “第二届ICT技术发展与企业数字化转型高峰论坛” 在北京隆重召开。 本次论坛以 “数据驱动&#xff0c;AI引领&#xff0c;打造新质生产力” 为主题&#xff0c;特邀业内200余…

hadoop hdfs优势和缺点

hdfs优点 高容错性适合处理大数据可构建再廉价的机器上 hdfs缺点 不适合做低延迟数据访问 毫秒级的存储数据做不到 无法高效的对大量小文件进行存储不支持并发写入 文件随机修改 一个文件只能有一个writer 不允许多个线程同时写仅支持数据追加 不支持文件的随机修改 hdf…

队列的特性及代码实现(C语言)

目录 队列的定义 队列的实现分析 代码实现 Queue.h Queue.c 队列的定义 队列是只允许在一端进行插入操作&#xff0c;而在另一段进行删除操作的线性表。 首先&#xff0c;让我们来看一看生活中的队列&#xff0c;当我们去银行办理业务的时候&#xff0c;我们进入银行的时候…

TPK系列——2W 3KVDC 隔离单,双输出 DC/DC 电源模块

TPK系列是一款2W并且有高隔离电压要求的理想产品&#xff0c;工业级温度范围–40℃到 105℃&#xff0c;在此温度范围内都可以稳定输出2W&#xff0c;并且效率非常高&#xff0c;高达89%&#xff0c;同时负载调整率非常低&#xff0c;对于有输出电压精度有要求的地方特别合适&a…

服务案例|网络攻击事件的排查与修复

LinkSLA智能运维管家V6.0版支持通过SNMP Trap对设备进行监控告警&#xff0c;Trap是一种主动推送网络设备事件或告警消息的方式&#xff0c;与SNMP轮询&#xff08;polling&#xff09;不同&#xff0c;具有以下几点优势&#xff1a; 1. 实时监控与快速响应 SNMP Trap能够实时…