GAMES101 课程 1、2 记录 & 作业 0 题解

2022 年 7 月 24 日 星期日(已编辑)
/ ,
15

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

GAMES101 课程 1、2 记录 & 作业 0 题解

最近开始补一直没学的图形学内容,发现部分内容在学 SLAM 的时候都见过,这种似曾相识的感觉还是挺有意思的。

Lecture 1 概论

课程大纲:

  • Rasterization(光栅化):将三维空间几何形体投影到平面
  • Curves and Meshes(几何、曲线与曲面)
  • Ray Tracing(光线追踪)
  • Animation / Simulation(动画与模拟)

课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html 课程视频:https://www.bilibili.com/video/av90798049

图形学和计算机视觉的区别:

  • 计算机视觉对图像进行猜测,并尝试理解其中的信息。
  • 图形学将模型信息准确的表现为图形。
两者的区别

两者的区别

Lecture 2 线性代数

图形学前置知识:

  • 【数学】线性代数 / 微积分 / 统计学
  • 【物理】光学 / 力学
  • 【杂项】信号处理 / 数值分析

向量

  • 默认使用列向量,可以写作 (x,y,z)T(x,y,z)^T
  • 使用结束点减去起始点得到 AB=BA\overrightarrow{AB} = B - A
  • 加减遵循平行四边形法则
  • a\|\vec{a}\| 表示向量长度
  • a^\hat{a} 表示与 aa 向量同方向的单位向量,a^=aa\hat{a} = \frac{\vec{a}}{\|\vec{a}\|}
点乘
  • ab=abcosθcosθ=abab\vec{a} \cdot \vec{b} = \|\vec{a}\|\|\vec{b}\|\cos\theta \Rightarrow \cos\theta = \frac{\vec{a}\cdot\vec{b}}{\|\vec{a}\|\|\vec{b}\|} 对于单位向量有 cosθ=a^b^\cos\theta = \hat{a}\cdot\hat{b}
  • 向量点乘满足交换律和分配律
    • ab=ba\vec{a}\cdot\vec{b} = \vec{b}\cdot\vec{a}
    • a(b+c)=ab+ac\vec{a}\cdot(\vec{b} + \vec{c}) = \vec{a}\cdot\vec{b} + \vec{a}\cdot\vec{c}
    • (ka)b=a(kb)=k(ab)(k\vec{a})\cdot\vec{b} = \vec{a}\cdot(k\vec{b}) = k(\vec{a}\cdot\vec{b})
  • 在笛卡尔坐标系下
ab=(xaya)(xbyb)=xaxb+yayb \begin{equation} \tag{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 \end{equation}
ab=(xayaza)(xbybzb)=xaxb+yayb+zazb \begin{align} \tag{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 \end{align}
  • 应用场景:
    • 计算两个向量之间的夹角
    • 计算向量在另一个向量上的投影
    • 两个向量之间的垂直距离(减去投影向量)
    • 描述两个向量的前后关系(如下图)
向量点乘的应用场景

向量点乘的应用场景
叉乘
  • 两个向量 a,b\vec{a},\vec{b} 叉乘得到一个与两个向量都垂直的向量
  • 方向遵循右手定则,从 a\vec{a}b\vec{b},拇指方向为叉乘后的向量方向
  • 大小为 absinθ\|\vec{a}\|\|\vec{b}\|\sin\theta
  • 在笛卡尔坐标系中
a×b=(xayaza)×(xbybzb)=(yazbybzazaxbxazbxaybyaxb) \vec{a}\times\vec{b} = \begin{pmatrix} x_a \\ y_a \\ z_a \end{pmatrix} \times \begin{pmatrix} x_b \\ y_b \\ z_b \end{pmatrix} = \begin{pmatrix} y_az_b - y_bz_a \\ z_ax_b - x_az_b \\ x_ay_b - y_ax_b \end{pmatrix}

可以用反对称矩阵表示

a×b=Ab=(0zayaza0xayaxa0)(xbybzb) \vec{a}\times\vec{b} = A^*b = \begin{pmatrix} 0 & -z_a & y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0 \end{pmatrix} \begin{pmatrix} x_b \\ y_b \\ z_b \end{pmatrix}
  • 不满足交换律:a×b=b×a\vec{a}\times\vec{b} = -\vec{b}\times\vec{a},满足分配律
  • 应用场景:
    • 建立三维直角坐标系(右手系)
    • 通过右手法则判断向量左右关系(看最后叉乘向量方向)
    • 判断点在多边形内:以三角形为例,判断点 PP 在三角形 ABCABC 内即判断 AB×AP,BC×BP,CA×CP\overrightarrow{AB}\times\overrightarrow{AP}, \overrightarrow{BC}\times\overrightarrow{BP}, \overrightarrow{CA}\times\overrightarrow{CP} 结果向量是否同向(同号)
向量叉乘的应用场景

向量叉乘的应用场景

矩阵

  • 矩阵乘法没有交换律(矩阵的左乘和右乘代表不同的变换关系,所以是不能换的),有结合律和分配律
  • (AB)T=BTAT(AB)^T = B^TA^T
  • 应用:对图像矩阵进行旋转、平移、缩放、投影等

常见的变换性质(来自视觉 SLAM 十四讲)RR 是正交矩阵,AA 是可逆矩阵,ss 是缩放因子,tt 是平移,aTa^T 是缩放,vv 是齐次时增加的量

变换名称矩阵形式自由度不变性质
欧式变换[Rt0T1]\begin{bmatrix}R & t \\ 0^T & 1\end{bmatrix}6长度、夹角、体积
相似变换[sRt0T1]\begin{bmatrix}sR & t \\ 0^T & 1\end{bmatrix}7体积比
仿射变换[At0T1]\begin{bmatrix}A & t \\ 0^T & 1\end{bmatrix}12平行性、体积比
射影变换[AtaTv]\begin{bmatrix}A & t \\ a^T & v\end{bmatrix}15接触平面的相交和相切

作业 0 题解

其实这个作业就是配一个环境,照着需要的去安装就行了,推荐 Windows 下环境用这个:

  • 【WSL】Windows 的 Linux 子系统
  • 【Xming】用来给 WSL 打开 GUI 界面的
  • 【Eigen】矩阵运算的库
  • 【GCC】C++ 编译器
  • 【Cmake】编译工具
  • 【Opencv 3.4】推荐这个版本,我上 2020 课程是用的这个

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...