1向量 verctors
沒有絕對的起始結(jié)束位置
表示方向和長度
單位向量: 提個長度為1的向量
單位向量 = a向量 / a向量的長度
圖形學(xué)中用來表示方向
求和這里有兩種不同的解釋 一個平行四邊形法則 一個三角形法則
1平行四邊形法則:可以吧a b都放在一個起點上 然后對應(yīng)的平移 得到平行四邊形 鏈接就是相加結(jié)果
2三角形法則: 要相加就把所有的向量首尾相接起來 第一個的開始和最后一個的結(jié)束相連就是相加結(jié)果
3代數(shù)理解
同樣描述一個向量a (4,3)
這里用笛卡爾坐標系描述一個向量,將起點永遠設(shè)為原點伤柄,沿X有一些單位向量吩屹,y同理 向量的結(jié)果可以表示為 nX+pY 通常 x y 互相垂直切單位長度相等把篓。好處是可以直接用數(shù)字表示 (4,3) 有4個x3個y
圖形學(xué)中默認這個向量是個列向量 左下角
也可以變成行向量 A^t 轉(zhuǎn)至向量
這樣的好處是算向量長度很簡單信姓。代數(shù)形式非常有助于計算長度
向量的其他計算:點乘叉乘
點乘
向量的點乘的意義:
點乘最后結(jié)果會得到一個數(shù)
也就是兩個向量點乘后會得到一個數(shù)
常見的應(yīng)用
兩邊都除以 a 的單位向量和 b的單位向量祝闻,得
可以快速得到 兩個向量夾角的余弦
當兩個都是單位向量時
會更快
點乘的基本屬性:
滿足交換律 結(jié)合律 分配率
在笛卡爾坐標系下 點乘的運算會更加簡單 如圖
這個道理可以從二維擴展到高維
點乘在圖形學(xué)中最大的作用就是找到兩個向量 方向間的夾角
也可以用于計算兩個向量的投影
現(xiàn)在有a b 兩個向量 要算b在a上的投影
既然是b在a上的投影 必然是沿著a向量
那么一定等于 a的單位向量乘以一個長度 k
而k = b的長度 * cosθ * a的單位向量
cosθ我們之前已經(jīng)知道如何計算 所以就可以得到 改投影向量
那么我們有了該投影只有最大的好處就是 可以將改向量分解為兩個向量(平行四邊形法則) 有了投影向量就可以得到另一個垂直于改向量的向量寄疏。
1.點乘可以快速的將一個向量分解為平行與垂直的分解
2.可以算兩個向量有多么接近(點乘結(jié)果)
3.還可以告訴大家一個關(guān)于前與后的信息
有給定方向的向量a 我們可以用a的起點向整個上面方向探過去和下面探過去會形成兩個半圓
一部分是上半部分一個是下半部分 如果一個向量和a在同一起點終點落在上半圓 那么我們就說a 和該向量方向基本相同(b向量) 如果在下半部分則基本相反(c向量)
我們?nèi)绻?a點乘b 會得到一個 >0的結(jié)果
如果用a點乘c 會得到一個 <0 的結(jié)果
如果正好在徐線上瞧栗,會得到一個 == 0 的結(jié)果
也就是點乘可以告訴我們 一個方向性 兩個的方向是否基本用一致
接近的應(yīng)用:例如看鏡子 有光打在了鏡子上如果正好在反射方向看可以看到一個很亮的點 如果不在這個方向上看就看不到
對于金屬而言 入射光達到金屬 會發(fā)射 在鏡面反射方向的周圍 都屬于高光范圍 距離范圍遠就看不到了
叉乘
輸入兩個向量a b 得到第三個向量伴榔,同時垂直于前兩個向量
長度為而方向來說需要依靠右手定則 右手四指頭微彎曲 方向為 第一個向量 指向 第二個向量 的方向 大拇指的方向就是垂直的結(jié)果 而反過來叉乘則得到 一個相反的方向
所以 a x b = - b x a
左側(cè):
在三維系中給定了x y 軸,相互叉乘可以得到對應(yīng)的坐標軸
如果在一個坐標系中 x 叉乘 y == z 那么說這是一個右手坐標系(滿足右手定則) 如果 x 叉乘 y = - z 則是左手坐標系
一般常用右手坐標系 圖形學(xué)中
右側(cè):幾個常用的性質(zhì)
1 不滿足交換律
2 自己叉乘自己得到一個0向量
因為長度等于
兩向量相同 sinθ == 0 得到 0向量(無論如何叉乘的結(jié)果都是一個向量)
3 分配率滿足
4 結(jié)合律滿足(重要 可以減少計算量 加快計算速度)
叉乘用代數(shù)形式計算
上半部分 得到一個向量 笛卡爾坐標形式
下半部分 之后會講到
可以吧向量a寫成一個 對應(yīng)的矩陣 再用這個矩陣去誠意向量b 同樣可以得到該結(jié)果
叉乘在圖形學(xué)中的作用
1 判定左和右
2 判定內(nèi)與外
例子如下
左半部分:
有兩個向量 a b 如何判斷b是否在a的左側(cè)?
用a 叉乘b 得到的結(jié)果的 z值 是正的 說明b在a的左側(cè)
反過來 b叉乘a 得到一個一個向量的z值 為負 說明在右側(cè)
右半部分:
有一個三角形 a b c 判斷p是否在三角形的內(nèi)部
分別看 (ab ap) (bc bp) (ca cp) 是否p點的向量都在左側(cè) (或者說 結(jié)果都在同一側(cè)(左側(cè)或右側(cè))踪少,如果結(jié)果不都在同一側(cè) 則說明在外部) 此方法適用于任何的凸多邊形
拓展來說塘安,這一點非常重要 這就是之后做三角形光柵化的基本 要判斷三角形內(nèi)有哪些像素 就需要計算給定的像素是否在三角形的內(nèi)部 然后對內(nèi)部的進行著色 對于的結(jié)果是0的 在圖形學(xué)中叫做 corner case 邊界情況,算在內(nèi)測還是外側(cè) 自己決定
然后我們可以通過上面的知識來定義一些不同的坐標系等
例如 用叉乘可以定義一些互相垂直的軸援奢,這些軸就會形成 一個坐標系
假如我們定義一個三維坐標系
給到 u v w三個單位向量
且相互點乘 == 0
w = u 叉乘 v
這樣得到的結(jié)果自然就是一個右手的 三維直角坐標系兼犯。
這樣的好處是 我們可以把任意的一個向量 p 分解到這三個對應(yīng)的軸上去
(注意這里 u v w是單位向量 如果不是需要再轉(zhuǎn)換一下)
那么我們就可以將 p 向量從 p u v w 四個向量同在的一個坐標系中 轉(zhuǎn)換為 u v w坐標系中的表示形式
矩陣
1 幾乎所有的計算機課都會涉及到矩陣的一些操作 都很困擾
2 圖形學(xué)中 普遍應(yīng)用于一些基礎(chǔ)變換
移動 旋轉(zhuǎn) 裁切 縮放
矩陣就是一堆安排在n行m列的一個數(shù)組 a[m][n]
乘一個數(shù)很簡單 就講矩陣中的每個數(shù)乘以該數(shù)字
矩陣之間的乘積有一個必須的前提要求 就是
A X B ==> A的行數(shù) 必須等于 B的列數(shù) 否則不能相乘
也就是N必須相等 結(jié)果為 a[M][P]
運算方法如下
res[i][j] = A的i行 點乘 b的第j列
A X B = C, C[i][j] = A[row i] 點乘 B[column j]
A的第i行點乘 B的第j列
矩陣乘積的性質(zhì)
1 不滿足交換律(除特殊情況)
2 結(jié)合律滿足(十分重要,這里設(shè)置到多個矩陣相乘時通過結(jié)合律可以改變先后相乘順序 例如 ABCD == A(B(CD))這樣可能會大大減少運算量。)
3 分配律滿足
矩陣如何乘以一個列向量
矩陣在左邊 向量在右邊(列向量)
或者是 行向量 向量在左邊 矩陣在右邊
還是必須滿足 [a,M] X [M, b] M必須相等
這是變換的關(guān)鍵 (向量變換)
一個最簡單的變換集漾,對二維坐標系上的任何一個向量切黔,按照y軸做一個對稱操作 就可以用這樣一個
變換矩陣(左邊的)就可以將 x 變?yōu)?-x
矩陣的轉(zhuǎn)置操作
就是把行和列變換 如上, 由 ab 變?yōu)?ba
矩陣的轉(zhuǎn)置有一個性質(zhì)
兩個矩陣的相乘后轉(zhuǎn)置 等于 后一個矩陣轉(zhuǎn)置 乘以 前一個矩陣轉(zhuǎn)置(方向掉了過來)
特殊的矩陣 單位矩陣 是一個對角陣切對角元素都為1
1 任何矩陣乘以單位矩陣都是其本身
2 定義矩陣的逆
如果你能找到另一個矩陣 乘以原矩陣(不論順序) 結(jié)果為一個單位矩陣 則兩個矩陣是互逆的
成績的逆也是 兩個翻過來的逆再相乘
向量的點乘叉乘的矩陣寫法形式
a向量點乘b向量 == a轉(zhuǎn)置(行向量) 成 列向量 b ==> 結(jié)果為一個數(shù)
叉乘同樣具篇,將 a 向量重新組織為 A* 矩陣 再去乘以b向量