《3D数学基础-图形和游戏开发》阅读笔记 | 3D数学基础 (学习中 1.6更新)

文章目录

  • 3D数学基础
    • 矢量/向量
      • 什么是向量
        • 点与矢量的关系
      • 向量基础运算 向量加法
      • 向量基础运算 数乘
    • 线性组合 - 坐标系的基
      • 如果选择不同的基向量会怎么样?- 张成(Span)的空间
      • 三维向量的张成空间
      • 线性相关与线性相关
    • 矩阵与线性变换
      • 矩阵-几何意义线性变换
      • 矩阵乘法与线性变换复合

3D数学基础

学习视频:线性代数的本质 强烈推荐!!

矢量/向量

在笔记中

  • 变量使用小写字母表示,a
  • 由于笔记中画上箭头表示向量比较麻烦,这里小写字母加粗显示,a
  • 矩阵变量使用粗体大写字母表示,A

线性代数围绕向量加法+向量数乘两种基本运算。行矩阵和列矩阵都可以描述向量,在本笔记中,没有特殊说明都是采用行矩阵。

什么是向量

在线性代数中,Vector被称为向量,在几何中,Vector被称为矢量,文中向量矢量都在使用。数字 = 标量,通常用于缩放向量。

在这里插入图片描述
向量是空间中的箭头,在线代中,向量经常以原点作为起点。向量的数组表示法[x,y]表示从原点出发(向量起点)如何到达向量终点。

矢量意义
矢量是具有大小和方向的有向线段。

  • 矢量的大小:矢量的长度,非负值。
  • 矢量的方向:描述矢量在空间中指向的方向。

图形上每个矢量是位置无关的,比如使用笛卡尔坐标描述矢量时,每个坐标相当于描述对应维度(xy其他)中有符号位移
比如三维矢量[3,-1,2]可以表示为①向+x轴平移3个单位②向+y轴平移-1个单位(或者-y轴平移1个单位)③向+z轴平移2个单位。其实顺序不重要,移动的总量是一样的。

矢量可以理解为某种运动方式(二维中沿x轴怎么运动,沿y轴怎么运动)

零矢量:矢量中唯一没有方向的,可以理解为无位移(而不是一个点因为矢量不描述一点)

点与矢量的关系

假设有点(x,y)与矢量[x,y]
如果从原点开始按照矢量[x,y]指定的量移动,最终将到达点(x,y)的位置。或者说矢量[x,y]给出了原点到点(x,y)的位移。

在这里插入图片描述

向量基础运算 向量加法

比如v+w,三角形法则几何理解为从一个点开始应用由c指定的位移,然后再应用由w指定的位移,与直接应用v+w指定的位移效果一致。
在这里插入图片描述
比如在一维轴上,先向右走2步再向右走5步的效果等于直接从原点向右走7步。

假设v=[1,2]、w=[3,-1],v+w表示先沿x轴移动1+3个位移,再沿y轴移动2+(-1)个位移
在这里插入图片描述

向量基础运算 数乘

运算式:k[x,y,z] = [x,y,z]k = [kx,ky,kz]

数字 = 标量,通常用于缩放向量。

kv表示向量沿指定方向缩放k倍,从数字的角度看,对应于将每一个分量分别*k。
向量与标量相乘就是将向量中的每个分类与标量相乘。

在这里插入图片描述

线性组合 - 坐标系的基

假设 i和j是坐标系的基向量
其中
x方向的单位向量i:长度为1,指向+x方向
y方向的单位向量j:长度为1,指向+y方向

并不是说基向量一定是单位向量,空间的一组基严格定义:向量空间的一组基是张成该空间的一个线性无关向量集合

利用坐标系的基,我们可以从另一个角度描述向量。向量可以表示为缩放坐标系的基向量并相加,向量=两个经过缩放的向量和。

将向量v=[3,-2]的分量想象成标量,3表示拉伸i为原来的3倍,-2表示反向拉伸j为原来的两倍。所以向量v = 3i+(-2)j
在这里插入图片描述

如果选择不同的基向量会怎么样?- 张成(Span)的空间

任选两个基向量,使用任意两个标量缩放基向量,然后两基向量相加可以得到所有的二维向量。
当用数字(坐标)描述向量时,都依赖于我们正在使用的基。

比如描述物体的运动时,要依赖参考系。所以用数字描述向量时,要看是在哪个基向量下。

两个数乘向量的和被称为这两个向量的线性组合

为什么叫线性?如果固定住其中一个向量,让另一个向量自由变化,那么向量的终点会描出一条直线。

  • 如果同时缩放两个向量,这两个向量并不共线且都不是零向量,那么就可以得到平面中的所有位置。
  • 如果两个初始向量共线,产生的向量终点被限制在一条过原点的直线上。
  • 如果两个初始向量为零向量,那么产生的向量终点就是原点。

任意两个不共线的向量可以作为平面空间的基底

在这里插入图片描述

张成(Span)的空间vw全部线性组合构成的向量集合

是扩张成(张开形成?)的空间吗?感觉这里的张成应该是一个动词?对大部分向量v和w来说,他们张成的空间是所有二维向量的集合,对共线的v和w来说,他们张成的空间是终点落在一条直线上的向量的集合。

在这里插入图片描述

三维向量的张成空间

两个三维向量张成的空间是一个过原点的平面,所有终点落在这个平面上的向量的集合就是这两个向量张成的空间。
在这里插入图片描述
三个三维向量张成的空间

  1. 第三个向量恰好落在前两个向量所张成的平面上(第三个向量由前两个线性组合形成,可以想象成二维的共线),张成的空间不会变化还是之前的两个三维向量的张成空间。
  2. 如果没有落在前两个向量张成的空间上,这三个三维向量可以描述所有的三维向量(当缩放第三个向量时,前两个向量张成的平面沿着第三个向量的方向来回移动)

线性相关与线性相关

在二维空间的案例中,两个向量共线;在三维空间的案例中,第三个向量恰好落在前两个向量所张成的平面上。

从几何的角度解释线性相关
当有多个向量时,移除其中一个而步减小张成的空间,称这组向量是线性相关的。
其中一个向量可以表示为其他向量的线性组合,因为这个向量已经落在其他向量张成的空间中。

在这里插入图片描述
线性无关
二维中的表示就是不共线
三维中的表示就是其中一个向量不在另外两个向量张成的空间中
在这里插入图片描述
在这里插入图片描述

矩阵与线性变换

线性变换:将输入的向量映射之后输出新的向量,比如映射F(a)=b 表示映射F将a映射到b
使用变换暗示了可以将这种映射想象成一种运动,比如旋转。

定义:当F满足线性映射时,F(a+b) = F(a)+F(b) 且 F(ka) = F(kb)
描述:将两个矢量相加然后执行变换 = 单独对两个矢量执行变换,然后将变换后的矢量加载一起。缩放一个矢量然后执行变换 = 先变换后缩放

线性变换需要同时具备的性质
1.直线在变换后仍然保持为直线,不能弯曲
2.原点保持固定
在这里插入图片描述

矩阵-几何意义线性变换

记录两个基向量ij变换后的位置,就可以计算出任意向量经过变换后的位置
重要性质:线性变换保持组合系数不变

因为向量之间的关系没变(标量不变),变的只是基向量
组合系数是特征值?

矩阵只是一个记号,描述了一个线性变换的信息,或者说记录变换后的基向量

案例
假设存在v=[-1,2],v=-1i+2j,线性变换保持组合系数不变,所以转换后的v = -1转换后的i + 2转换后的j

方阵的几何意义:如果知道一对基如何变换等于知道整个坐标系怎么变换了

  • 方阵的行(如果基向量是列向量则是方阵的列)可以理解为坐标空间变换之后的基向量
  • 将向量从原始空间变化到新坐标空间的方法是:向量 * 矩阵,矩阵向量乘法就是计算线性变化作用于定向量的一种途径。
  • 可通过可视化变化后坐标空间的基矢量来可视化矩阵。

另一个角度理解矩阵乘法的定义
在这里插入图片描述

矩阵乘法与线性变换复合

AB:先执行A变换然后执行B变换
如果采用列矩阵表示向量,则先执行B变换再执行A变换。

渲染案例
世界上任何位置和方向都有一个对象,假设希望给定的任意位置和方向上的相机渲染此对象。
前提:取得该对象的顶点(很多顶点)
步骤
1.模型变换,将对象的顶点从对象空间变换到世界空间中
2.视图变换,将世界空间顶点变换到相机空间

Pwld = Pobj Mobj->wld
Pcam = PwldMwld->cam
=> Pcam = Pobj(Mobj->wldMwld->cam)
=> Pcam = Pobj(Mobj->cam)
  • AB 不一定等于 BA :可以将这种变换想象成函数f(g(x)),由于f(g(x)) 不一定等于g(f(x)),所以AB 不一定等于 BA。
  • (AB)C = A(BC):可以将括号理解为将两次变化步骤一次性合并了,但变换的顺序还是一致的。

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

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

相关文章

业务数据技术中台概念与相互关系

随着企业数字化转型和发展模式的转变,企业的应用架构建设模式主要为数据+中台(平台)+应用,这里的企业就涵盖互联网大企业和传统企业,大家都在开展必做的事情,即数字化时代的企业数字化转型 。同时,正好最近在做顶层设计和数字化转型整体应用架构设计,就梳理了一下中台发展…

Kafka消息存储

一、层次结构 具体到某个broker上则是, 数据目录/分区名/日志相关文件集合。其中日志文件集合内包括.log文件, index索引文件和.timeindex时间戳索引文件。 二、.log 结构 .log中记录具体的消息。一般消息由header和body组成, 这点儿在Kafka消息中也同样适用。 message MES…

qt自定义控件的封装

刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下: 想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui 在smal…

Mongodb使用指定索引删除数据

回顾Mongodb删除语法 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;除了指定过滤器外&#xff0c;还可以指定写入策略&#xff0c;字符序和使用的索引。 …

【Leetcode】230. 二叉搜索树中第K小的元素

一、题目 1、题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例1: 输入:root = [3,1,4,null,2], k = 1 输出:1示例2: 输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3提示: 树中…

字节跳动基础架构SRE-Copilot获得2023 CCF国际AIOps挑战赛冠军

近日&#xff0c;2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会在北京成功举办&#xff0c;活动吸引了来自互联网、运营商、科研院所、高校、软硬件厂商等领域多名专家学者参与&#xff0c;为智能运维的前沿学术研究、落地生产实践打开了新思路。决赛中&#xff0…

看图识熊(二)

使用Tools for AI封装onnx模型并推理 进行这一步之前&#xff0c;请确保已正确安装配置了Visual Studio 2017 和 Microsoft Visual Studio Tools for AI环境。 项目的代码也可以在这里找到&#xff0c;下面的步骤是带着大家从头到尾做一遍。 界面设计 创建Windows窗体应用(…

双向数据绑定详细解析(超详细)

文章目录 一、什么是双向绑定二、双向绑定的原理是什么理解ViewModel 三、实现双向绑定实现编译Compile依赖收集 参考文献 一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xf…

QML —— 使用Qt虚拟键盘示例(附完整源码)

示例效果 使用"虚拟键盘"注意 &#xff08;例子的Qt版本:5.12.4&#xff09; 注意一&#xff1a;      /* 必须在main.cpp开始处加入如下代码&#xff0c;否则无法使用"虚拟键盘" */      qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeybo…

苹果MacOS12系统 Monterey最新正式版下载 MacOS12系统镜像包

macOS 12 Monterey是苹果公司最新发布的操作系统&#xff0c;为Mac用户带来了更强大、更智能的功能和体验。 这个版本引入了许多令人兴奋的新特性&#xff0c;其中包括革命性的Universal Control功能&#xff0c;让你可以无缝地在Mac和iPad之间进行操作。只需将iPad放在Mac附近…

OpenCV的安装和vscode的配置

在图像处理领域&#xff0c;OpenCV的使用是必不可少的&#xff0c;这里介绍一下OpenCV的安装及其在vscode中的配置 1.OpenCV的安装 &#xff08;1&#xff09;安装依赖 sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavc…

GEE——土地利用分类种两个矢量集合中不同列进行相减的方式(利用join进行连接处理)

问题: 我有两个具有相同 ID 的特征集,我想从第二个特征集中减去第一个特征集的表格单元格。 我使用了这个函数,但它计算的是表 1 中第一个元素与表 2 中其他元素的减法。 我想逐个单元格计算减法。第一个表格中 id 为 1 的单元格减去第二个表格中 id 为 1 的单元格,2x2、…

主线程退出后子线程是否还会正常运行?

问题&#xff1a; 父子线程的关系 今天突然有感而发&#xff0c; 想要来探讨一下主线程和子线程之间的关系。 例一&#xff1a;子线程执行时间较父线程慢 public class ThreadTest {public static void main(String[] args) {// 测试主线程 和 子线程Thread sonThread new …

Python 教程 01:Python 简介及发展历史

ℹ️说明&#xff1a;关于本教程的一些约定 ① 教程后有&#xff08;选读&#xff09;的表示此教程为扩展内容&#xff0c;选读&#xff1b; ② 教程中涉及到的代码片段有时候并非代码块&#xff0c;而是图片&#xff0c;这是防止初学者直接复制代码粘贴的行为&#xff0c;想必…

应用OpenCV绘制箭头

绘制箭头函数 方法&#xff1a;函数cv2.arrowedLine( ) 语法格式&#xff1a;cv2.arrowedLine(img, pt1, pt2, color[, thickness[, line_type[, shift[, tipLength]]]]) 参数说明&#xff1a; img&#xff1a;要画的直线所在的图像&#xff0c;也称为画布。。 pt1&#x…

【CSS】文字描边的三种实现方式

目录 1. 可行的几种方式1.1. text-shadow 描边代码优缺点 1.2. text-stroke 描边实现优缺点 1.3. svg 描边实现优缺点 总结 1. 可行的几种方式 text-shadow–webkit-text-strokesvg 1.1. text-shadow 描边 MDN text-shadow 代码 <div class"text stroke">…

Ubuntu软件和vmware下载

https://cn.ubuntu.com/download/desktop VMware 中国 - 交付面向企业的数字化基础 | CN

HttpRunner自动化测试工具之获取响应数据extract提取值到变量

获取响应数据 extract: 提取 注&#xff1a;extract 应与request保持同一层级 1、响应行&#xff0c;响应头&#xff1b;通过 extract 提取响应的数据并存储到变量中&#xff0c;如下图&#xff1a; 注&#xff1a;变量名的前面要有 - # 获取响应数据: 响应行&#xff08;…

【比赛专题】江苏省信息安全管理与评估 理论题样题题库整理

GZ032 信息安全管理与评估赛题第1套 一、 单选题 &#xff08;每题 2 分&#xff0c;共 35 题&#xff0c;共 70 分&#xff09; 1、《中华人民共和国数据安全法》已由中华人民共和国第十三届全国人民代 表大会常务委员会第二十九次会议通过&#xff0c;现予公布&#xff0c;自…

蓝桥杯基础知识1 字母大小写转换

蓝桥杯基础知识1 字母大小写转换 isalpha()判断一个字符是否为字母。 isalnum()判断一个字符是否为十进制数字字符或者字母&#xff0c;是否属于a~ z或A~ Z或0~9。 isdigit() 判断一个字符是否是十进制数字字符。十进制数字是&#xff1a;0 1 2 3 4 5 6 7 8 9 isalnum()和isdig…