GAMES101-现代计算机图形学学习笔记(02)

GAMES101-现代计算机图形学学习笔记(02)

今天有幸看到闫老师的现代图形学课程,感觉真的讲得很好,所以决定把自己的一些学习笔记以及课程作业记录下来,希望能和大家一起讨论学习一下。如果有时间还是希望大家能去看看原课程,强推!!
b站视频链接: link.
课程官网链接: link.

向量

向量定义

一种既有大小,又有方向的量;大小体现在模长,方向体现在指向。
没有绝对的起始位置,所以也具有平移不变性的性质。
一个如图所示的向量 A B \overrightarrow{A B} , 可由如下公式表示:
在这里插入图片描述
A B = B A \overrightarrow{A B}=B-A

向量运算

向量单位化

向量 A B \overrightarrow{A B} 的模长记为: A B ||\overrightarrow{A B}|| , 对于三维空间的向量 A B = ( x , y , z ) \overrightarrow{A B} = (x,y,z) 来说,模长为 x 2 + y 2 + z 2 2 \sqrt[2]{x^{2}+y^{2}+z^{2}}
一个模长为1的向量为单位向量,计算一个单位向量可以通过 A B ^ = A B / A B \hat{AB}=\overrightarrow{A B} /\|\overrightarrow{A B}\| 来计算。

向量加法的两种表示形式

  1. 几何上:表示为平行四边形或者三角形法则相加
  2. 代数上:表示为数值位(坐标轴位)上的相加

向量乘法

假设已知向量 a \vec{a} b \vec{b} 为三维空间上的向量。

  1. 点乘
    点乘结果是一个
    ①代数形式:
    向量点乘表示为其各个分量上的乘积和
    a b = i = 1 3 a i b i = a 1 b 1 + a 2 b 2 + a 3 b 3 \vec{a} \cdot \vec{b}=\sum_{i=1}^{3} a_{i} b_{i}=a_{1} b_{1}+a_{2} b_{2}+a_{3} b_{3}
    ②几何形式:
    a b = a b cos θ \vec{a} \cdot \vec{b}=\|\vec{a}\|\|\vec{b}\| \cos \theta
    同时也可以变换公式得到两个向量的夹角余弦值:
    cos θ = a b a b \cos \theta=\frac{\vec{a} \cdot \vec{b}}{\|\vec{a}\|\|\vec{b}\|}
    即通过该余弦值计算两个向量的相似度。
    ③意义:
    第一点,找到两个向量的夹角(可以通过角度的大小决定两个向量的前后关系);
    在这里插入图片描述
    第二点,找到一个向量在另一个向量上的投影;
    第三点,对向量在水平和垂直方向上进行分解;
    第三点图
    点乘的应用十分广泛,还有诸如计算光照反射分量也需要用到点乘,即考虑了入射光和物体表面法向的夹角关系,当光照方向与物体法向方向夹角越小时,其光照影响会越大,即点乘结果越接近1,如下图所示:
    在这里插入图片描述
  2. 叉乘
    叉乘结果是一个向量
    ①代数形式:
    a × b = ( y a z b y b z a z a x b x a z b x a y b y a x b ) \vec{a} \times \vec{b}=\left(\begin{array}{l} y_{a} z_{b}-y_{b} z_{a} \\ z_{a} x_{b}-x_{a} z_{b} \\ x_{a} y_{b}-y_{a} x_{b} \end{array}\right)
    ②几何形式:
    数值上 a \vec{a} , b \vec{b} 夹角为θ组成的平行四边形的面积。
    方向上垂直于 a \vec{a} , b \vec{b} 所决定的平面,其指向按右手定则从 a \vec{a} 转向 b \vec{b} 来确定。

    需要注意的一点)两个向量叉乘交换需要加负号,而点乘不需要。
    a × b = b × a \vec{a} \times \vec{b}=-\vec{b} \times \vec{a} a b = b a \vec{a} \cdot \vec{b}=\vec{b} \cdot \vec{a}
    ③意义:
    第一点,叉乘可以用来向量的左右关系。若向量 a \vec{a} 在向量 b \vec{b} 右边,通过右手法则,他们叉乘的结果应该朝上;而如果结果朝下,则向量 a \vec{a} 在向量 b \vec{b} 左边;
    第二点,叉乘可以用来判断一个点是否在多边形内。如果一个点P在一个多边形内,那么从该多边形所有的点来说,每条边构成的向量与点p构成的向量叉乘结果都应该是一致的,反之,会出现某些叉乘结构不一致,即算出的向量方向相反。
    下图中点A B C 构成的向量与点 P构成的向量的叉乘结果都是朝向屏幕外。
    在这里插入图片描述

矩阵

矩阵定义

矩阵本质上是由m × n 个数排成的m行n列的数表。记作:
A = [ a 11 a 12 a 1 n a 21 a 22 a 2 n a 31 a 32 a 3 n a m 1 a m 2 a m n ] \mathbf{A}=\left[\begin{array}{llll} a_{11} & a_{12} & \cdots & a_{1 n} \\ a_{21} & a_{22} & \cdots & a_{2 n} \\ a_{31} & a_{32} & \cdots & a_{3 n} \\ \cdots & \cdots & & \cdots \\ a_{m 1} & a_{m 2} & \cdots & a_{m n} \end{array}\right]

矩阵运算

包括矩阵与矩阵的加法,减法,矩阵的交换律,结合律等等。这里不详细展开,可以参考:
链接: link.

矩阵乘法

  1. 矩阵与数的乘法
  2. 矩阵与矩阵的乘法(需要第一个矩阵列数与第二个矩阵行数相等)
    在这里插入图片描述

点乘和叉乘的矩阵乘法表示

  1. 点乘的矩阵乘法表示
    a b = a T b = ( x a y a z a ) ( x b y b z b ) = ( x a x b + y a y b + z a z b ) \begin{array}{cc} \vec{a} \cdot \vec{b}=\vec{a}^{T} \vec{b} =\left(\begin{array}{lll} x_{a} & y_{a} & z_{a} \end{array}\right)\left(\begin{array}{l} x_{b} \\ y_{b} \\ z_{b} \end{array}\right) \end{array}=\left(x_{a} x_{b}+y_{a} y_{b}+z_{a} z_{b}\right)
  2. 叉乘的矩阵乘法表示
    a × b = A b = ( 0 z a y a z a 0 x a y a x a 0 ) ( x b y b z b ) \vec{a} \times \vec{b}=A^{*} b=\left(\begin{array}{ccc} 0 & -z_{a} & y_{a} \\ z_{a} & 0 & -x_{a} \\ -y_{a} & x_{a} & 0 \end{array}\right)\left(\begin{array}{l} x_{b} \\ y_{b} \\ z_{b} \end{array}\right)
    这里的叉乘也和后面计算轴角的一个分量对应上了。

总的来说,图形学里用到的矩阵和向量概念十分多,向量可由用来计算光照,表示方向,同时矩阵也可以用来计算变换过程,十分方便。

原创文章 9 获赞 3 访问量 513

猜你喜欢

转载自blog.csdn.net/qq_36242312/article/details/105643915