概述+线性代数

为什么学习图形学?

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. # BlackLivesMatter !

    下载 # BlackLivesMatter ! https://blacklivesmatter.com/ 黑人的生命是重要的运动资源 VueCroppie VueCroppie是一个Vue 2包装C ...

  2. linxu 命令

    top | grep java 统计 java 进程使用的资源比率 nohub java -jar test.war & 后台运行 test.war 程序,标准输出到 test.war 程序目 ...

  3. 视频+图文教程 | Java之安装JDK与环境配置

    演示所用软件JDK 8与Eclipse(Java开发工具)软件下载链接: 链接:https://pan.baidu.com/s/1Vg9ulrQH8WlGRAE89Y02UA提取码:swwl 视频介绍 ...

  4. ES6之数组

    数组新增方法 map(可以理解为是映射,以一定规则修改数组每一项并返回全新数组) reduce(可以理解为是汇总,一堆出来一个) filter(可以理解为过滤,筛选的意思,以一定规则拿到符合的项并返回 ...

  5. 【UER #1】DZY Loves Graph

    UOJ小清新题表 题目内容 UOJ链接 DZY开始有\(n\)个点,现在他对这\(n\)个点进行了\(m\)次操作,对于第\(i\)个操作(从\(1\)开始编号)有可能的三种情况: Add a b: ...

  6. docker-阿里云加速

    系统版本 centos7 阿里云登录 ->容器镜像服务->镜像加速器 复制下面的直接执行即可     sudo mkdir -p /etc/docker sudo tee /etc/doc ...

  7. swoole一键协程

    swoole4.x后支持一键协程 加上后,开启一键协程化后,MySQL.Redis.Curl 等操作会变成异步 IO //此行代码后,文件操作,sleep,Mysqli,PDO,streams等都变成 ...

  8. java 第一课 笔记

    java是一种解释型语言 Java提供了内存自动管理:不涉及指针:单继承. classpath:字节码文件的路径,执行java.exe时,会查找并解释*.class文件 set classpath=. ...

  9. pwn之栈缓冲区溢出漏洞(入门)

    题目ret2text 题目信息确认 使用file命令查看文件类型 root@CTF:/home/# file ret2text ret2text: ELF 32-bit LSB executable, ...

  10. sql中的字符串拼接

    转载自:https://www.cnblogs.com/rainman/p/6203065.html 1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三 ...