当前位置: 首页 > 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…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...