Game101课程笔记_lecture02_线性代数(图形学)

1 图形学需要的基础

  • 数学:线性代数,微积分,统计学
  • 物理:光学,力学
  • 其他:信号处理,数值分析
  • 一点美学

2 线性代数

1 向量概念

在这里插入图片描述

2 vector normalization向量规范化

在这里插入图片描述

3 向量加法

向量的加法可以从两个角度去理解:

  • 从几何的角度去理解:平行四边形法则和三角形法则
    在这里插入图片描述
  • 坐标系中相应的坐标相加
    将向量表示成坐标的形式是非常有助于计算向量的长度的;
    在这里插入图片描述

4 向量的点乘 Dot product

两个向量的点乘是一个数;

在这里插入图片描述

可以快速计算两个向量之间的夹角;
向量点乘的基本属性:
在这里插入图片描述

在直角坐标系中的计算公式如下:
在这里插入图片描述
向量点乘在图形学中的用法:

  • 快速找到两个向量之间的夹角;比如在
  • 一个向量投影到另外一个向量上什么样子的
  • 可以计算两个向量方向接近程度:根据点乘的结果来判断是接近和远离;比如在高光渲染的时候就要用这个知识
    在这里插入图片描述
  • 向量点乘还可以给出一个前与后的信息:如果落在了上半圆就是接近,如果落在了下半圆就是远离。根据点乘的符号来判断,如果是正的,结果等于1就是相同,如果是-1是相向;
    在这里插入图片描述
    在这里插入图片描述
    投影-可以将一个向量分解成两个向量,一个向量平行于第一个向量,另外一个向量垂直于第一个向量;

5 向量的叉乘 Cross product

向量叉乘的结果是一个向量!方向用右手螺旋定则确定(或者左手)
在这里插入图片描述
右手螺旋定则:
OpenGL中使用的是左手坐标系!
在这里插入图片描述
在这里插入图片描述
叉乘在图形学中的意义:

  • 判断左和右
    如下图:判断b在a的左边还是右边
    用a叉乘b,得到的结果是正的,说明b在a的左侧
    用b叉乘a,得到的结果是负的,说明b在a的右侧

在这里插入图片描述

  • 判断里和外
    判断P在三角形ABC的内部?
    ABXAP,结果是正的,说明P在AB的左侧
    BCXBP,结果是正的,说明P在AB的左侧
    CAXPC,结果是正的,说明P在CA的左侧
    所以P在三角形ABC的内部,
    绕的顺序是AB-BC-CA,绕向逆时针和顺时针,也就是三个叉乘结果要嘛都是正的,要嘛都是负的
    这个是三角形光栅化的基础,要知道三角形覆盖了哪些像素,判断像素是否在三角形内部;

在这里插入图片描述

6 正交坐标系

在这里插入图片描述

2 矩阵

1 概念

在这里插入图片描述

2 矩阵的乘积

在这里插入图片描述
有个简单的记忆方法:
在这里插入图片描述
26是结果的二行四列:
找第一个矩阵的第二行(5,2),第二个矩阵的第四列(4,3),把两个向量求个点积就可以了。
再测试一个,61是二行三列
第三行(5,2)和第三列(9,8)求点击就是61;
也就是需要算第几行第几列的数值,直接子在输入矩阵中找第几行第几列就可以了!

3 矩阵相乘的特性

没有交换律
在这里插入图片描述

4 矩阵向量相乘

始终任务矩阵在左边,向量在右边
将向量看成是mx1的矩阵
点的变换就是基于这个知识点

5 矩阵的转置

在这里插入图片描述

6 单位矩阵

矩阵的逆
在这里插入图片描述

7 向量的乘积的矩阵形式

在这里插入图片描述
这个性质在推旋转的时候很有用的

3 视频

https://www.bilibili.com/video/av90798049?p=2

### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值