概述+线性代数

为什么学习图形学?

Computer Graphics is AWESOME!

主要涉及内容:

  • 光栅化
  • 曲线和网格
  • 光线追踪
  • 动画与模拟

Differences between CG and CV:

线性代数回顾

向量(Vectors)

  • 方向和长度

    模长:\(||\vec{a}||\)

  • 没有确定的起点

  • 单位向量:模长为1

    单位化向量: \(\hat{a} = \vec{a}/||\vec{a}||\)

  • 向量求和:

  • 列向量,转置,模长的计算方式

    \(\boldsymbol{A} = \begin{pmatrix}x \\ y\end{pmatrix} \quad \boldsymbol{A}^T = \begin{pmatrix}x&y\end{pmatrix} \quad ||\boldsymbol{A}|| = \sqrt{x^2+y^2}\)

  • 点乘(Dot/scalar Product)

  • 点乘定义:

    \(\vec{a} \cdot \vec{b} = ||\vec{a}||\,||\vec{b}||cos\theta\)

    \(cos\theta = \frac{\vec{a}\cdot\vec{b}}{||\vec{a}\||\,||\vec{b}||}\)

  • For unit vectors:

    \(cos\theta = \hat{a}\cdot\hat{b}\)

  • 交换律、结合律、数乘

直角坐标系下,计算更为方便:

  • 2D:

    \(\vec{a}\cdot\vec{b} = \begin{pmatrix}x_a \\y_a\end{pmatrix}\cdot\begin{pmatrix}x_b \\y_b\end{pmatrix} = x_ax_b+y_ay_b.\)

  • 3D:

    \(\vec{a}\cdot\vec{b} = \begin{pmatrix}x_a \\y_a\\z_a\end{pmatrix}\cdot\begin{pmatrix}x_b \\y_b\\z_b\end{pmatrix} = x_ax_b+y_ay_b+z_az_b.\)

  • 投影:

$\vec{b}_\perp:\vec{b}$ 在 $\vec{a}$ 上的投影;

$\vec{b}_\perp = k\hat{a};$ 

$k = ||\vec{b}_\perp|| = ||\vec{b}||cos\theta$
  • 点乘可以告诉我们前和后的关系

  • 叉乘(Cross\Vector product)

    • 两个向量相乘,得到一个与这两个向量都相等的向量;

      \(\vec{a}\times\vec{b} = -\vec{b}\times\vec{a}\)

      \(\vec{a}\times\vec{a} = \vec{0}\)

      \(||\vec{a}\times\vec{b}|| = ||\vec{a}||\,||\vec{b}||sin\phi\)

      方向由右手螺旋定则确定

    • 笛卡尔坐标系下的计算方法:

      \(\vec{a}\times\vec{b} = \begin{pmatrix}y_az_b-y_bz_a \\ z_ax_b - x_az_b \\ x_ay_b-y_ax_b\end{pmatrix} = A*b = \begin{pmatrix}0 & -z_a& y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0\end{pmatrix}\)

      \(A\) 为 \(\vec{a}\) 的对偶矩阵。

    • 叉乘在图形学中的作用

      判定左和右(一次叉乘),判断内和外(三次叉乘)

  • 正交系

    • 三个单位向量

      $ ||\vec{u}|| = ||\vec{v}|| = ||\vec{w}|| = 1$

    • 两两垂直

    \(\vec{u}\cdot\vec{v} = \vec{v}\cdot\vec{w} = \vec{u}\cdot\vec{w}\)

    • 右手系

      \(\vec{w} = \vec{u}\times\vec{v}\)

    • 任何一个向量可以由这三个向量表示

      \(\vec{p} = (\vec{p}\cdot\vec{u})\vec{u} + (\vec{p}\cdot\vec{v})\vec{v} + (\vec{p}\cdot\vec{w})\vec{w}\)

      因为\(\vec{u}\ \vec{v}\ \vec{w}\) 都是单位向量,所以可以用 \(\vec{p}\) 在其上的投影乘以其本身来得到一个维度的分量。

  • 矩阵(Matrices)

    • 矩阵乘矩阵

      维度需满足:

      \((M\times N)(N\times P) = (M\times P)\)

      (3 2)(2 4)= (3 4)

    • 不符合交换律。但符合结合律和分配律。

      \((AB)C = A(BC)\)

      \(A(B+C) = AB + AC\)

      \((A+B)C = AC + BC\)

    • 矩阵向量乘

      按 \(y\) 轴镜像

      \(\begin{pmatrix}-1 & 0 \\ 0 & 1\end{pmatrix}\begin{pmatrix}x \\ y \end{pmatrix} = \begin{pmatrix}-x \\ y\end{pmatrix}\)

    • 矩阵的转置

      \((AB)^T = B^TA^T\)

    • 单位矩阵

      \(I_{3\times3} = \begin{pmatrix}1 & 0 & 0 \\ 0 & 1 & 0\\ 0 & 0 & 1\end{pmatrix}\)

      \(AA^{-1} = A^{-1}A = I;\quad (AB)^{-1} = B^{-1}A^{-1}\)

    • 向量乘法的矩阵形式

      \(\vec{a}\cdot\vec{b} = \vec{a}^T\vec{b}\)

      \(\vec{a}\times\vec{b} = \begin{pmatrix}y_az_b-y_bz_a \\ z_ax_b - x_az_b \\ x_ay_b-y_ax_b\end{pmatrix} = A^*b = \begin{pmatrix}0 & -z_a& y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0\end{pmatrix}\)

GAMES101系列笔记一 图形学概述与线性代数入门的更多相关文章

  1. Java系列笔记(0) - 目录和概述

    笔者在开发过程中发现自己基础太薄弱,读书时除了系统学习了一下Java的基础语法和用法.一点简单的数据结构和设计模式之外,再无深入系统的学习,而工作中的学习也是东晃一枪西晃一枪,不够扎实和系统.想到一个 ...

  2. Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!

    Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...

  3. 【Notes_1】现代图形学入门——计算机图形学概述

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  4. Java系列笔记(2) - Java RTTI和反射机制

    目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...

  5. 深入理解javascript函数系列第一篇——函数概述

    × 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...

  6. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  7. Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  8. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  9. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

随机推荐

  1. 笔记本键盘按U键却变成了4

    解答 笔记本键盘U盘变成了4,是因为你开启了小键盘功能.出现该问题,只要关闭小键盘功能即可,操作如下: 按住键盘下方的Fn,同时按住键盘顶部的F键中标有Numlk的键. 电脑屏幕出现解锁标志,小键盘功 ...

  2. Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动.拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等.这些需要针对控件元素的滑动操作,或者 ...

  3. 多路复用select和epoll的区别(转)

    先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法 一.问题引出 联系区别 问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一 ...

  4. vscode设置snippets

    自动添加文件描述信息 "File Comments": { "prefix": "filecomments", "body&quo ...

  5. 测试-python相关

    python基础 一行代码实现1~100累加,不使用for循环 方式一: sum(range(1,101)) 方式二: 1 from functools import reduce 2 reduce( ...

  6. spring boot:使用validator做接口的参数、表单、类中多字段的参数验证(spring boot 2.3.1)

    一,为什么要做参数验证? 永远不要相信我们在后端接收到的数据, 1,防止别人通过接口乱刷服务:有些不怀好意的人或机构会乱刷我们的服务,例如:短信接口, 相信大家可能很多人在工作中遇到过这种情况 2,防 ...

  7. 【线上排查实战】AOP切面执行顺序你真的了解吗

    前言 忙,是我这个月的主旋律,也是我频繁鸽文章的接口----蛮三刀把刀 公司这两个月启动了全新的项目,项目排期满满当当,不过该学习还是要学习.这不,给公司搭项目的时候,踩到了一个Spring AOP的 ...

  8. 010_Markdown学习

    目录 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 引用 分割线 图片 超链接 列表 表格 代码 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 ...

  9. Java 内存级默认DNS缓存

    Java 默认的DNS缓存时间,即不设置任一系统属性,如networkaddress.cache.ttl 设置SecurityManager 默认的CachePolicy为Forever,即永久缓存D ...

  10. vue watch的用法

    1.监听对象需要深度监听 ,如下代码可以监听整个msg对象的变化 watch: { msg: { handler(newValue, oldValue) { console.log(newValue) ...