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

文章目录

  • 前言
  • 正文
    • 向量
      • 什么是向量?
      • 向量涉及哪些常见计算?
        • 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变换,本质上就是对应三个矩阵!这方面内容会在后面章节详细讲解哦!大家拭目以待!

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库中的六大锁

目录 一、死锁 二、锁的区间划分 1、间隙锁(Gap Locks) 2、临键锁(Next-key Locks) 三、锁的粒度划分 1、表级锁(Table-level lock) 2、行级锁(Record Locks) 3、页级锁 四、…

一分钟教你学浪app视频怎么缓存

你是否在学浪app上苦苦寻找如何缓存视频的方法?你是否想快速、轻松地观看自己喜欢的视频内容?那么,让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧! 学浪下载工具我已经打包好了,有需要的自己下载一下 学浪下…

【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析

🔥 个人主页:空白诗 🔥 热门专栏:【JavaScript】 文章目录 🌿 引言五、 Destructuring Assignment - 解构赋值,数据提取的艺术 🎨📌 数组解构📌 对象解构📌 特…

动态规划之单词拆分

这次分享一道关于动态规划的leetcode,单词拆分。 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词…

【技术】汉诺塔的递归问题解析及多语言实现

汉诺塔的递归问题解析及多语言实现 汉诺塔(Hanoi Tower)问题是一个非常经典的递归问题。它起源于一个古老的传说:有三个柱子和64个大小不一的金盘,开始时这些金盘按从小到大的顺序放在柱子A上,目标是在柱子B上按同样的…

Java——Java开发环境

一、JDK 1、什么是JDK JDK(Java Development Kit,Java 开发工具包)是用于开发 Java 应用程序的核心工具包。它包含了编写、编译、调试和运行 Java 程序所需的一切工具和库。JDK 是每个 Java 开发者必备的工具。 2、JDK 主要组件 JDK主要包…

HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3 计科210X 甘晴void 202108010XXX 文章目录 计算机体系结构 实验31 实验目的2 实验过程2.0 预备知识2.0.1 多cache一致性算法——监听法2.0.1.1 MSI协议2.0.1.2 MESI协议2.0.1.3 本题讲解 2.0.2 多cache一致性算法——目录法2.0.2.1 有中心的目录法2.0.2…

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

B2126 连续出现的字符

连续出现的字符 题目描述 给定一个字符串&#xff0c;在字符串中寻找第一个连续出现次数不低于 k k k 次的字符。 输入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是仅包含大小写字母的字符串。 输出格式 字符串中第一个连续出现次数不低于 k 次的字符…

Python面试宝典:Python中与动态规划和排序算法相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十二章:高级数据结构和算法:第二节:Python中实现各类高级数据结构与算法三】 第十二章:高级数据结构和算法第二节:Python中实现各类高级数据结构与算法2.3、python中与动态规划和排…

网页如何给js后台传递数字类型参数

网页无法通过get方法传递数字参数给js后台&#xff0c;就是网页端写的是数字参数&#xff0c;传递给后台也变成了数字字符串。而js对数字类型和字符串类型是不相同的。由于我们的代码是通过中间件挂载接口的&#xff0c;通过joi库检查参数。 const Joi require(joi); //注意&…

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…

【日记】终于鼓起勇气买了吹风机!(356 字)

正文 好忙。今天比昨天还要忙&#xff0c;水都没喝几口。嗯&#xff0c;好像只喝了两口。 今天补了一份印鉴卡&#xff0c;销了一个户&#xff0c;变了一个户&#xff0c;弄了一大堆资料找人签字&#xff0c;还顺带要解决一个押品的历史遗留问题。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…

超分论文走读

codeFormer 原始动机 高度不确定性&#xff0c;模糊到高清&#xff0c;存在一对多的映射纹理细节丢失人脸身份信息丢失 模型实现 训练VQGAN 从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性&#xff0c;我们设计尽量小的码本空间和尽量短的Code…

ECS搭建2.8版本的redis

要在ECS&#xff08;Elastic Compute Service&#xff09;上手动搭建Redis 2.8版本&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤1&#xff1a;更新系统和安装依赖 首先&#xff0c;登录到你的ECS实例&#xff0c;确保系统是最新的并安装必要的依赖包&#xff1a; s…

运营推广最容易被忽略的细节!用短链接推广必须要掌握这些要点!

短链接是目前很多企业进行网络推广最常用的方式之一&#xff0c;是引流转化的重要桥梁&#xff0c;很多工作者可能觉得用短链接推广&#xff0c;只需要简简单单的把生成好的短链接放上去就行&#xff0c;但是实际上有很多细节要点是需要着重注意的&#xff0c;今天小编就围绕这…

做外贸怎么给新老客户定价

通常情况下我们对于新客户的关注点要比老客户更多一些&#xff0c;大概是因为新客户的开发周期比较长而且不确定性也很大。 但是对于一些返单的老客户对比来讲&#xff0c;老客户的稳定性就会相对来说增加很多&#xff0c;如果款式规格都是固定的&#xff0c;那么老客户从选品…

[AIGC] Nginx常用变量详解

Nginx非常强大&#xff0c;其主要功能包括HTTP服务器、反向代理、负载均衡等。Nginx的配置中有许多内置的变量&#xff0c;你可以在配置文件中使用这些变量进行灵活的配置。在本篇文章中&#xff0c;我们将介绍一些Nginx中常见的变量&#xff0c;包括proxy_add_header。 常见变…