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

文章目录

  • 3D数学基础
    • 矢量/向量
      • 概述 - 什么是向量
        • 单位矢量:只关注方向不关注大小
      • 数学运算
        • 矢量的加法与减法
        • 减法的几何意义计算一个点到另一个点的位移
        • 矢量的点积与叉积
    • 矩阵
      • 矩阵的几何意义

3D数学基础

矢量/向量

在笔记中

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

概述 - 什么是向量

在线性代数中,Vector被称为向量。在几何中,Vector被称为矢量。

向量意义
对数学家来说,向量是一个数字列表(程序员一般称为数组)。

[1,2,3]表示为行向量,垂直过来就是列向量。可以引用向量来表示各个分量,通常使用x,y来代指二维向量中的元素,x,y,z来代指三维向量中的元素。比如a=[1,2,3]ax=1,ay=2,az=3

矢量意义

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

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

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

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

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

在这里插入图片描述

单位矢量:只关注方向不关注大小

单位矢量/归一化矢量 表示大小为1(单位长度)的矢量

有时会将单位向量称为法线,法线通常隐含垂直于其他东西的矢量,主要关注点在垂直而不是单位长度。法线往往是单位向量,但是也有例外(所以需要注意例外的情况)

总结

  • 归一化矢量是大小为单位长度的矢量
  • 法线与某些东西垂直的矢量,通常情况是单位长度

计算公式
v的单位矢量=v/|v|

数学运算

标量和矢量的乘法,标量乘以矢量的每个分量
k[x,y,z] = [x,y,z]k = [kx,ky,kz]

矢量的加法与减法

规则:相应分量相加/相减

a+b= b+a
a-b = -(b-a)

比如a+b,三角形法则几何理解为从一个点开始应用由a指定的位移,然后再应用由b指定的位移
在这里插入图片描述

减法的几何意义计算一个点到另一个点的位移

比如a点到b的距离,将ab理解为来自原点的矢量,b-a产生的是从ab的矢量,矢量b-a的长度就是两点之间的距离。
在这里插入图片描述

矢量的点积与叉积

在这里插入图片描述
在这里插入图片描述

矩阵

在这里插入图片描述

在这里插入图片描述

矩阵的几何意义

  • 方阵的行可以理解为坐标空间的基矢量
  • 将矢量从原始空间变化到新坐标空间的方法是:矢量 * 矩阵
  • 原始坐标空间到由基矢量定义的坐标空间的变化是线性变化(保留直线、平行线也保持平行、原点不移动变化不包含平移),但角度、长度、面积等可能在变化后发生变化。
  • 可以通过可视化变化后坐标空间的基矢量来可视化矩阵。

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

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

相关文章

Linux实用指令篇

目录结构 Linux文件系统结构是从Unix文件结构演进过来的。在Linux文件系统中,通用的目录名用于表示一些常见的功能。 Linux 的文件系统是采用层级式的树状目录结构,在此结构中的最上层是 根目录 “/”,然后在此目录下再创建其他的目录。在L…

安装 Node.js、npm

安装 nodejs 安装Node.js的最简单的方法是通过软件包管理器。 Node.js官网:https://nodejs.org/en/download/ cd /usr/local/src/wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz xz -d node-v18.16.0-linux-x64.tar.xz tar -xf node…

轻松搞定软件开发:找对软件开发公司的流程与注意事项!

随着数字化时代的来临,软件开发在企业和个人生活中扮演着越来越重要的角色,然而,如何找到一家合适的软件开发公司却成为了一个令人头疼的问题。 本文将为你详细解读找软件开发公司的流程,以及在选择过程中需要注意的事项&#xf…

C#编程-编写和执行C#程序

编写和执行C#程序 可以使用Windows记事本应用程序来编写C#程序。在记事本应用程序中创建C#程序后,您需要编译并执行该程序以获得所需的输出。编译器将程序的源代码转换为机器代码,这样计算机就能理解程序中的指令了。 注释 除了记事本,您还可以使用任何其他文本编辑器来编写…

UnityRenderStreaming使用记录(一)

UnityRenderStreaming 地址https://github.com/Unity-Technologies/UnityRenderStreaming 一、客户端相关 1、unity工程添加Package 2、WebRTC选Version 3.0.0-pre.6,升级会报错 导入Samples 3、打开Broadcast场景 二、服务器相关 这里使用github上的源码&…

kubeadm创建k8s集群

kubeadm来快速的搭建一个k8s集群: 二进制搭建适合大集群,50台以上。 kubeadm更适合中下企业的业务集群。 部署框架 master192.168.10.10dockerkubelet kubeadm kubectl flannelnode1192.168.10.20dockerkubelet kubeadm kubectl flannelnode2192.168.1…

MySQL数据库高级SQL语句及存储过程

目录 一、高级SQL语句 (一)case语句 1.语法定义 2.示例 (二)空值(NULL) 和 无值( ) 1.区别 2.示例 (1)字符长度 (2)判断方法 ① 空值(NULL) ② 无值( ) (3…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

【数据分析】指数移动平均线的直观解释

slavahead 一、介绍 在时间序列分析中,通常需要通过考虑先前的值来了解序列的趋势方向。序列中下一个值的近似可以通过多种方式执行,包括使用简单基线或构建高级机器学习模型。 指数(加权)移动平均线是这两种方法之间的稳健权衡。…

nginx源码分析-4

这一章内容讲述nginx的模块化。 ngx_module_t:一个结构体,用于描述nginx中的各个模块,其中包括核心模块、HTTP模块、事件模块等。这个结构体包含了一些模块的关键信息和回调函数,以便nginx在运行时能够正确地加载和管理这些模块。…

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题: Gamplay Debugger启用不知道? Apostrophe、Tilde键不知道是哪个? Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger

day02 有序数组的平方 长度最小子数组 螺旋矩阵

题目1&#xff1a;977 有序数组的平方 题目链接&#xff1a;977 有序数组的平方 题意 返回非递减整数数组的每个数字的平方和 也按照递减排序 双指针★ 代码 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int>…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK&#xff0c;发现 虚拟机默认的 200G 空间不足了&#xff0c;因此想增加这个 200G 空间的限制&#xff0c;通过网络上查找了一些方法&#xff0c;加上自己亲自验证&#xff0c;确认 硬盘扩容 正常&#xff0c;方法也比较的容易&a…

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…

Java日期和时间(二)

新增的日期和时间 为什么要学习新增的日期和时间 1、代替Calendar LocalDate&#xff1a;年、月、日 LocalTime&#xff1a;时、分、秒 LocalDateTime&#xff1a;年、月、日、时、分、秒 ZoneId&#xff1a;时区 ZoneldDatetime&#xff1a;带时区的时间 2、代替Date Instan…

解决npm,pnpm,yarn等安装electron超时等问题

我在安装electron的时候&#xff0c;出现了超时等等各种问题&#xff1a; &#xff08;RequestError: connect ETIMEDOUT 20.205.243.166:443&#xff09; npm yarn&#xff1a;Request Error: connect ETIMEDOUT 20.205.243.166:443 RequestError: socket hang up npm ER…

【排序】堆排序(C语言实现)

文章目录 前言1. 堆排序1.1 堆排序的思想1.2 堆排序的实现 2. 为什么向下调整而不是向上调整 前言 本章主要会讲堆排序的实现过程以及向上调整和向下调整的时间复杂度&#xff0c;在学习本章前&#xff0c;需要对堆、以及向上调整和向下调整有一个了解&#xff0c;如果不了解的…

vite+Vue3学习笔记(3)——界面设计

1 Element-plus 这是一个基于Vue3的组件库&#xff0c;能够快速构建界面样式。 官网链接&#xff1a; https://element-plus.gitee.io/zh-CN/guide/design.html 1.1 基础组件 1.1.1 安装 项目中的终端输入&#xff1a; npm install --save element-plus 1.1.2 引用 1.1.2.1…

图论及其应用(匈牙利算法)---期末胡乱复习版

目录 题目知识点解题步骤小结题目 T1:从下图中给定的 M = {x1y4,x2y2,x3y1,x4y5},用 Hungariam算法【匈牙利算法】 求出图中的完美匹配,并写出步骤。 知识点 关于匈牙利算法: 需要注意的是,匈牙利算法仅适用于二分图,并且能够找到完美匹配。什么是交替路?从一个未匹…