当前位置: 首页 > news >正文

《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):可以将括号理解为将两次变化步骤一次性合并了,但变换的顺序还是一致的。

相关文章:

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

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

解锁测试性能瓶颈:深度探讨JMeter分布式性能测试!

在做后端服务器性能测试中,我们会经常听到分布式。但你是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意? 0…...

SiC电机控制器(逆变器)发展概况及技术方向

SiC电机控制器(逆变器)发展概况及技术方向 1.概述2.电动汽车动力系统设计趋势3.栅极驱动器和驱动电源配置4.结论 tips:资料来自网上搜集,仅供学习使用。 1.概述 2022年到2023年,第三代半导体碳化硅被推上了新的热潮。…...

useContext

可以跨组件传值 其实主要的就是三步 1、const xxx React.createContext();创建一个context 2、<xxx.Provider value{{ num, setNum }}>父组件设置要传递的值 3、const { num, setNum } React.useContext(xxx);子组件下使用 特点&#xff1a; 1、可以有多个xxx.Pr…...

Java数据结构:1. 数据结构前置知识

文章目录 一、初识数据结构二、初识集合框架1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法 三、时间复杂度空间复杂度1. 算法效率2. 时间复杂度&#xff08;1&#xff09;概念&#xff08;2&#xff09;大O的渐进表示法&#xff08;3&#xff09;推导大…...

Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

以下是一个简单的示例代码&#xff0c;演示如何在Vue中使用Element UI的Table组件实现嵌套表格&#xff1a; html <template><div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label&quo…...

如何使用RESTful API构建 web 应用程序

RESTful API 是一种设计风格&#xff0c;用于构建可扩展、灵活和可维护的 web 应用程序。它是一种基于 HTTP 协议的架构风格&#xff0c;旨在提供一组规范和约束&#xff0c;以便客户端和服务器之间的通信更加简单和可预测。 RESTful API 通过使用 HTTP 动词来定义资源的操作&…...

开启Android学习之旅-4-Android集成FontAwesome

FontAwesome 是一个非常标准、统一风格的图标库。产品经理在原型中应用了很多图标都是FontAwesome。正常流程是 UI 需要再手工绘制或在 iconfont 或 iconpark 网站挨个找&#xff0c;如果在 Android 直接使用不是省了一步&#xff08;注意版权问题&#xff0c;使用免费版&#…...

Qt——TCP UDP网络编程

目录 前言正文一、TCP二、UDP1、基本流程2、必备知识 三、代码层级1、UDP服务端 END、总结的知识与问题1、如何获取QByteArray中某一字节的数据&#xff0c;并将其转为十进制&#xff1f;2、如何以本年本月本日为基础&#xff0c;获取时间戳&#xff0c;而不以1970为基础&#…...

有什么安全处理方案可以有效防护恶意爬虫

常见的爬虫 有百度爬虫、谷歌爬虫、必应爬虫等搜索引擎类爬虫&#xff0c;此类爬虫经常被企业用于提高站点在搜索引擎内的自然排名&#xff0c;使得站点在各大搜索引擎中的排名能够提高&#xff0c;进一步通过搜索引擎来进行引流为企业增加业务流量。 恶意爬虫与合法、合规的搜…...

Flutter3.X基础入门教程(2024完整版)

Flutter介绍&#xff1a; Flutter是谷歌公司开发的一款开源、免费的UI框架&#xff0c;可以让我们快速的在Android和iOS上构建高质量App。它最大的特点就是跨平台、以及高性能。 目前Flutter已经支持 iOS、Android、Web、Windows、macOS、Linux的跨平台开发。 教程所讲内容支持…...

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

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

mnn-llm: 大语言模型端侧CPU推理优化

在大语言模型(LLM)端侧部署上&#xff0c;基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能&#xff0c;特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力&#xff0c;qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力&#xff0c;能够在较低内存…...

Freemarker实现Html全站静态化

全站静态化 在大型网站中&#xff0c;比如主流电商商品页&#xff0c;访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢&#xff1f;其实把页面静态化&#xff0c;好处有很多。例如&#xff1a;访问速度快&#xff0c;更有利于搜索引擎收录等。 目前主流的静态化…...

16.顺子日期(14)

题目 public class Main {public static boolean isLegal(String date) {int l 0;int n date.length();while(l<(n-3)) {int t1 (int)Integer.valueOf(date.substring(l,l1));int t2 (int)Integer.valueOf(date.substring(l1,l2));int t3 (int)Integer.valueOf(date.s…...

《动手学深度学习》学习笔记 第5章 深度学习计算

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知道&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…...

【Redis】非关系型数据库之Redis的介绍及安装配置

目录 前言 一、关系型数据库与非关系型数据库 1.1关系型数据库 1.2非关系型数据库 1.3两者的区别 1.4非关系型数据库产生的背景 1.5总结 二、Redis介绍 2.1Redis是什么 2.2Redis的优点 2.3Redis的使用场景 2.4那些数据适合放在缓存中 2.5Redis为什么那么快&#xf…...

3D模型轻量化

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 近来&#xff0c;基于3D模型在影视作品、数字旅游项目诸多3D视觉领域都取得…...

数据分析——快递电商

一、任务目标 1、任务 总体目的——对账 本项目解决同时使用多个快递发货&#xff0c;部分隔离区域出现不同程度涨价等情形下&#xff0c;如何快速准确核对账单的问题。 1、在订单表中新增一列【运费差异核对】来表示订单运费实际有多少差异&#xff0c;结果为数值。 2、将…...

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(8)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;7&#xff09; 2.2 HOST主桥 MPC8548处理器的拓扑结构如图2-2所示&#xff1a; 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 MPC8548处理器使用ATMU&#xff…...

Hadoop分布式文件系统(二)

目录 一、Hadoop 1、文件系统 1.1、文件系统定义 1.2、传统常见的文件系统 1.3、文件系统中的重要概念 1.4、海量数据存储遇到的问题 1.5、分布式存储系统的核心属性及功能含义 2、HDFS 2.1、HDFS简介 2.2、HDFS设计目标 2.3、HDFS应用场景 2.4、HDFS重要特性 2.4…...

macOS跨进程通信: FIFO(有名管道) 创建实例

一&#xff1a; 简介 在类linux系统中管道分为有名管道和匿名管道。两者都能单方向的跨进程通信。 匿名管道&#xff08;pipe&#xff09;: 必须是父子进程之间&#xff0c;而且子进程只能由父进程fork() 出来的&#xff0c;才能继承父进程的管道句柄&#xff0c;一般mac 开发…...

推荐几个免费的HTTP接口Mock网站和工具

在前后端分离开发架构下&#xff0c;经常遇到调用后端数据API接口进行测试、集成、联调等需求&#xff0c;比如&#xff1a; &#xff08;1&#xff09;前端开发人员很快开发完成了UI界面&#xff0c;但后端开发人员的API接口还没有完成&#xff0c;不能进行前后端数据接口对接…...

企业数据库安全管理规范

1.目的 为规范数据库系统安全使用活动&#xff0c;降低因使用不当而带来的安全风险&#xff0c;保障数据库系统及相关应用系统的安全&#xff0c;特制定本数据库安全管理规范。 2.适用范围 本规范中所定义的数据管理内容&#xff0c;特指存放在信息系统数据库中的数据。 本…...

react:ffcreator中FFCreatorCenter视频队例

最近项目要求&#xff0c;一键生成房子的推荐视频&#xff0c;选几张图&#xff0c;加上联系人的方式就是一个简单的视频&#xff0c;因为有web端、小程序端&#xff0c;为了多端口用&#xff0c;决定放在服务器端生成。 目前用的是react中的nextjs来开发项目。 nextjs中怎样…...

力扣(leetcode)第434题字符串中的单词数(Python)

434.字符串中的单词数 题目链接&#xff1a;434.字符串中的单词数 统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 请注意&#xff0c;你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: “Hello, my name is John” 输出: 5 解释: 这…...

django学习:页面渲染与请求和响应

1.请求过程 2.页面渲染 在app中新建一个目录&#xff08;Directory&#xff09;&#xff0c;文件名命名为templates。该文件名命名是固定的&#xff0c;不可命名出错&#xff0c;如若后续步骤出错&#xff0c;该目录文件名是一个检查的重点项目。在该目录下新建一个html文件&a…...

Redis 数据一致性

概述 当我们在使用缓存时&#xff0c;如果发生数据变更&#xff0c;那么你需要同时操作缓存和数据库&#xff0c;而它们两个又分属不同的系统&#xff0c;因此无法做到同时操作成功或失败&#xff0c;因此在并发读写下很可能出现缓存与数据库数据不一致的情况 理论上可以通过…...

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar&#xff1a;[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI&#xff1a;[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…...

计算机网络——网络模型的组织、看法以及标准化流程

1. 通信技术和标准化领域中扮演重要角色的组织 1.1 国际和国家官方标准化机构 OSI&#xff1a;国际标准化组织&#xff08;ISO&#xff09;&#xff0c;负责国际标准的制定&#xff0c;旨在确保全球产品和服务的安全性、可靠性和效率。它有许多国家分支机构&#xff0c;包括法…...

寻找网站建设_网站外包/软文发布系统

前言 这里我们使用的时oracel中emp表&#xff0c;对他进行最基本的操作 简单的sqlplus语句 使用sqlplus登陆oracle数据库:普通用户登陆: sqlplus scott/tiger192.168.10.145/orclsys用户登陆: sqlplus sys/sys as sysdba解锁用户:alter user scott account unlock;加锁用…...

muse做的网站怎么样/站长统计性宝app

说明&#xff1a; &#xff08;1&#xff09;本篇博客内容&#xff1a;开发【友情链接列表查询&#xff0c;接口】&#xff1b; &#xff08;2&#xff09;本篇博客需要注意的点&#xff1a; ● 根据业务特点&#xff0c;我们这儿查询友情链接&#xff0c;直接查询的所有的链接…...

做网站建设的前景/seo博客优化

基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求web资源时&#xff0c;服务器端的返回状态会是200&#xff0c;内容是你请求的资源&#xff0c;同时有一个Last-Modified的属性标记此资源在服务期端最后被修改的时间&#xff0c;格式类似这样&#xff1a; …...

wordpress 图书馆主题/深圳网络提速优化服务包

上周&#xff0c;谷歌正式推送了Android 9.0 Pie的正式版&#xff0c;谷歌Pixel手机和Essential Phone率先升级&#xff0c;索尼等第三方厂商也都在第一时间公布了适配进度&#xff0c;小米、华为等厂商更是给部分机型推出了测试版固件。近日&#xff0c;HTC也通过官方推特公布…...

百度一下做网站/数据分析网官网

题意 给你n个数&#xff0c;然后询问l,r区间能构成三角形的最大周长是多少&#xff1f; 链接 [http://acm.hdu.edu.cn/showproblem.php?pid6601] 分析 因为a<1e9所以不超过44个斐波那契数&#xff0c;无论什么区间最多在那个范围内判断即可 也就是你要找某个区间的前四十五…...

北票市建设工程安全管理站网站/今天特大军事新闻

我们知道&#xff0c;request.GET() 是django根据键接收值常用方法&#xff0c;django官方文档也是给出的这个&#xff0c;但是我们实际开发基本上都是request.GET.get(),其实很好理解&#xff0c;但是对于许多初学者还是很迷惑&#xff0c;下面就这个问题我讲一下&#xff1a;…...