圖形學初識--矩陣和向量

文章目錄

  • 前言
  • 正文
    • 向量
      • 什么是向量?
      • 向量涉及哪些常見計算?
        • 1、取模
        • 2、歸一化
        • 3、向量加法
        • 4、向量減法
        • 5、向量與標量乘
        • 6、向量點乘(內積)
        • 7、向量投影
      • 向量有哪些基本應用?
    • 矩陣
      • 什么是矩陣?
      • 矩陣涉及哪些常見計算?
        • 1、矩陣加法
        • 2、矩陣減法
        • 3、矩陣乘法
        • 4、矩陣和向量乘法
      • 矩陣有哪些基本應用?
  • 結尾:喜歡的小伙伴可以點點關注+贊哦

前言

前面發布的【圖形學初識】系列文章,坐標基本上都指代屏幕空間的二維坐標,遲遲沒有進入真正的3維世界。為了真正進入三維世界,就需要存在一種工具將三維坐標映射為二維坐標,這個工具就涉及到數學中的線性代數中的一些概念,如:矩陣、向量、行列式等等!本章節就針對這些概念和相關計算做說明!

正文

向量

什么是向量?

概念:向量的相對概念是標量,以下是兩者的對比:

向量: 既有大小,又有方向;

標量: 只有大小,沒有方向;

舉個例子:

向量: 速度、加速度、力等

標量: 顏色、溫度、質量等

基本表示: a ? = A B ? = B ? A \vec{a} = \vec{AB} = B - A a =AB =B?A 。一個不太準確,但又十分形象的圖形表示如下圖:

在這里插入圖片描述

a ? \vec{a} a 大小:AB之間的距離

a ? \vec{a} a 的方向:A指向B的這個方向

三維空間下,假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) A = (x_0, y_0, z_0),B = (x_1, y_1, z_1) A=(x0?,y0?,z0?)B=(x1?,y1?,z1?),則 A B ? = B ? A = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) \vec{AB} = B - A = (x_1 - x_0, y_1 - y_0, z_1 - z_0) AB =B?A=(x1??x0?,y1??y0?,z1??z0?)?

本質上,上述的坐標表示法,其實是針對三維空間正交向量基的i、j、k的加權組合,但是因為目前還沒有講向量乘法、向量加法,所以沒法解釋,可以直觀的認為就是這樣做!

向量涉及哪些常見計算?

1、取模

假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0?,y0?,z0?)B=(x1?,y1?,z1?),AB =(x1??x0?,y1??y0?,z1??z0?),記 ∥ A B ? ∥ \|\vec{AB}\| AB A B ? \vec{AB} AB 模,本質就是向量的長度

計算公式如下:
∥ A B ? ∥ = ( x 1 ? x 0 ) 2 + ( y 1 ? y 0 ) 2 + ( z 1 ? z 0 ) 2 \|\vec{AB}\| = \sqrt{(x_1-x_0)^2 + (y_1-y_0)^2 + (z_1-z_0)^2} AB =(x1??x0?)2+(y1??y0?)2+(z1??z0?)2 ?

2、歸一化

假設 A = ( x 0 , y 0 , z 0 ) , B = ( x 1 , y 1 , z 1 ) , A B ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) A = (x_0,y_0,z_0),B=(x_1,y_1,z_1), \vec{AB} = (x_1-x_0,y_1-y_0,z_1-z_0) A=(x0?,y0?,z0?)B=(x1?,y1?,z1?),AB =(x1??x0?,y1??y0?,z1??z0?),記 A B ^ \hat{AB} AB^ A B ? \vec{AB} AB 的歸一化向量

歸一化本質:計算一個方向不變,長度變為1的對應向量

計算公式如下:
A B ^ = A B ? ∥ A B ? ∥ \hat{AB} = \frac{\vec{AB}}{\|\vec{AB}\|} AB^=AB AB ?

3、向量加法

假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0?,y0?,z0?)b =(x1?,y1?,z1?) 那么 c ? = a + b ? = ( x 1 + x 0 , y 1 + y 0 , z 1 + z 0 ) \vec{c} = \vec{a + b} = (x_1+x_0,y_1+y_0,z_1+z_0) c =a+b ?=(x1?+x0?,y1?+y0?,z1?+z0?)

代數解釋:對應坐標相加

幾何解釋:

(1)兩向量移動到統一起點,構成平行四邊形,副對角線即為加和結果

在這里插入圖片描述

(2)把b向量移動到a向量的末尾,從a起點連接b終點,得到的向量即為加和結果

在這里插入圖片描述

4、向量減法

假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0?,y0?,z0?)b =(x1?,y1?,z1?) 那么 c ? = b ? a ? = ( x 1 ? x 0 , y 1 ? y 0 , z 1 ? z 0 ) \vec{c} = \vec{b - a} = (x_1-x_0,y_1-y_0,z_1-z_0) c =b?a ?=(x1??x0?,y1??y0?,z1??z0?)

代數解釋:對應坐標相減

幾何解釋:向量a的末端連接向量b末端的一個新向量

在這里插入圖片描述

5、向量與標量乘

假設 a ? = ( x 0 , y 0 , z 0 ) \vec{a} = (x_0,y_0,z_0) a =(x0?,y0?,z0?) 那么 c ? = k a ? = ( k x 0 , k y 0 , k z 0 ) \vec{c} = k\vec{a} = (kx_0,ky_0,kz_0) c =ka =(kx0?,ky0?,kz0?)

代數解釋:對應坐標乘標量k

幾何解釋:當 k ! = 0 k\ !=0 k?!=0,向量等比例調整長度,k為縮放比例

在這里插入圖片描述

6、向量點乘(內積)

假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0?,y0?,z0?)b =(x1?,y1?,z1?) 那么記點乘 c ? = a ? ? b ? = x 1 x 0 + y 1 y 0 + z 1 z 0 \vec{c} = \vec{a} \cdot \vec{b} = x_1x_0 + y_1y_0+z_1z_0 c =a ?b =x1?x0?+y1?y0?+z1?z0???

注意:點乘的結果是一個標量

代數解釋:對應坐標相乘然后相加

幾何解釋: a ^ ? b ^ = ∥ a ? ∥ ∥ b ? ∥ cos ? θ \hat a \cdot \hat b = \|\vec{a}\|\|\vec{b}\|\cos \theta a^?b^=a ∥∥b cosθ, 如下圖所示

在這里插入圖片描述

7、向量投影

假設 a ? = ( x 0 , y 0 , z 0 ) , b ? = ( x 1 , y 1 , z 1 ) \vec{a} = (x_0,y_0,z_0),\vec{b} =(x_1,y_1,z_1) a =(x0?,y0?,z0?)b =(x1?,y1?,z1?) 那么記 a ? \vec a a b ? \vec b b 上的投影為 a p r j b ? \vec{a_{prjb}} aprjb? ?? ,計算公式如下:

在這里插入圖片描述

a p r j b ? = b ^ ? ∥ a ⊥ ? ∥ = b ? ∥ b ? ∥ ? cos ? θ ? ∥ a ? ∥ = b ? ∥ b ? ∥ ? a ? ? b ? ∥ a ? ∥ ∥ b ? ∥ ? ∥ a ? ∥ = a ? ? b ? ∥ b ? ∥ 2 b ? \begin{align} \vec{a_{prjb}} &= \hat b * \|\vec{a_{\perp}}\|\\ &=\frac{\vec b}{\|\vec b\|} * \cos \theta * \|\vec a\|\\ &=\frac{\vec b}{\|\vec b\|} * \frac{\vec a \cdot \vec b}{\|\vec a\| \|\vec b\|} * \|\vec a\|\\ &=\frac{\vec a \cdot \vec b}{\|\vec b\|^2}\vec b \end{align} aprjb? ??=b^?a? ?=b b ??cosθ?a =b b ??a ∥∥b a ?b ??a =b 2a ?b ?b ??

假設被投影的向量為單位向量,則結果可以簡化: a p r j b ? = ( a ? ? b ? ) b ? \vec{a_{prjb}} = (\vec a \cdot \vec b)\ \vec b aprjb? ?=(a ?b )?b

向量有哪些基本應用?

(1)判斷兩向量是否同向(重要)

在這里插入圖片描述

利用向量點乘的結果判斷,如果結果為負數,則不是同向,如果結果為正數,則同向。

(2)計算投影

? 略(上述已給出計算公式)

(3)計算夾角

? 略(也是利用點乘,計算 cos ? θ \cos \theta cosθ,從而計算出夾角)

矩陣

什么是矩陣?

矩陣本質就是一個二維數組,有行、有列,其中存儲許多數字,每個數字叫做矩陣的元素。第i行、j列的記作 a i j a_{ij} aij?,當行和列相等時,我們叫做方陣!

如下圖就是3x3的方陣,,我們常記作矩陣為 M M M
[ 10 12 30 ? 1 3 0 2 96 123 ] \begin{bmatrix} 10 & 12 & 30 \\ -1 & 3 & 0 \\ 2 & 96 & 123\\ \end{bmatrix} ?10?12?12396?300123? ?

當方陣的只有主對角線元素為1,其余所有元素為0,我們記矩陣為單位矩陣,記 I n I_n In?,如下圖:
[ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} ?100?010?001? ?

矩陣涉及哪些常見計算?

1、矩陣加法

前提:兩矩陣行列數相同

計算規則:對應元素相加

2、矩陣減法

前提:兩矩陣行列數相同

計算規則:對應元素相減

3、矩陣乘法

前提:矩陣 A A A 左乘矩陣 B B B ,要求A的列數與B的行數相同

計算規則:假設矩陣 C C C 的每個元素為 c i j c_{ij} cij? ,矩陣 A A A的每個元素為 a i j a_{ij} aij? ,矩陣 B B B的每個元素為 b i j b_{ij} bij? ,如果 C = A B C = AB C=AB

C C C的每個元素:
c i j = ( a i 0 a i 1 a i 2 . . . a i n ) ? ( b 0 j b 1 j b 2 j . . . b n j ) c_{ij} = \begin{pmatrix} a_{i0}\\ a_{i1}\\ a_{i2}\\ ...\\ a_{in}\\ \end{pmatrix} \cdot \begin{pmatrix} b_{0j}\\ b_{1j}\\ b_{2j}\\ ...\\ b_{nj}\\ \end{pmatrix} cij?= ?ai0?ai1?ai2?...ain?? ?? ?b0j?b1j?b2j?...bnj?? ?
給個示例圖:

在這里插入圖片描述

幾個常見的乘法性質:

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

注意: 矩陣乘法沒有交換律,一般來說: A B ! = B A AB\ != BA AB?!=BA

4、矩陣和向量乘法

我們可以將向量理解為列或者行為1的矩陣,這樣問題就轉化為矩陣的乘法類似,不多贅述!

如下圖:

在這里插入圖片描述

矩陣有哪些基本應用?

無所不能,在圖形學領域最重要的概念就是MVP變換,本質上就是對應三個矩陣!這方面內容會在后面章節詳細講解哦!大家拭目以待!

結尾:喜歡的小伙伴可以點點關注+贊哦

希望對各位小伙伴能夠有所幫助哦,永遠在學習的道路上伴你而行, 我是航火火,火一般的男人!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18841.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫中的六大鎖

目錄 一、死鎖 二、鎖的區間劃分 1、間隙鎖(Gap Locks) 2、臨鍵鎖(Next-key Locks) 三、鎖的粒度劃分 1、表級鎖(Table-level lock) 2、行級鎖(Record Locks) 3、頁級鎖 四、…

一分鐘教你學浪app視頻怎么緩存

你是否在學浪app上苦苦尋找如何緩存視頻的方法?你是否想快速、輕松地觀看自己喜歡的視頻內容?那么,讓我們一起探索一分鐘教你如何緩存學浪app視頻的技巧吧! 學浪下載工具我已經打包好了,有需要的自己下載一下 學浪下…

【JavaScript】ECMAS6(ES6)新特性概覽(二):解構賦值、擴展與收集、class類全面解析

🔥 個人主頁:空白詩 🔥 熱門專欄:【JavaScript】 文章目錄 🌿 引言五、 Destructuring Assignment - 解構賦值,數據提取的藝術 🎨📌 數組解構📌 對象解構📌 特…

動態規劃之單詞拆分

這次分享一道關于動態規劃的leetcode,單詞拆分。 單詞拆分 給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞…

【技術】漢諾塔的遞歸問題解析及多語言實現

漢諾塔的遞歸問題解析及多語言實現 漢諾塔(Hanoi Tower)問題是一個非常經典的遞歸問題。它起源于一個古老的傳說:有三個柱子和64個大小不一的金盤,開始時這些金盤按從小到大的順序放在柱子A上,目標是在柱子B上按同樣的…

Java——Java開發環境

一、JDK 1、什么是JDK JDK(Java Development Kit,Java 開發工具包)是用于開發 Java 應用程序的核心工具包。它包含了編寫、編譯、調試和運行 Java 程序所需的一切工具和庫。JDK 是每個 Java 開發者必備的工具。 2、JDK 主要組件 JDK主要包…

HNU-計算機體系結構-實驗3-緩存一致性

計算機體系結構 實驗3 計科210X 甘晴void 202108010XXX 文章目錄 計算機體系結構 實驗31 實驗目的2 實驗過程2.0 預備知識2.0.1 多cache一致性算法——監聽法2.0.1.1 MSI協議2.0.1.2 MESI協議2.0.1.3 本題講解 2.0.2 多cache一致性算法——目錄法2.0.2.1 有中心的目錄法2.0.2…

A2B V2.0協議學習筆記(非正式版本)

一、說明 A2B全稱是 Automotive Audio Bus 汽車音頻總線,主要是解決傳統音頻總線線多、線重、成本貴等問題。 A2B V2.0總線相對V1.0主要變化點: 速率提升,高達98.304Mbps,全雙工模式 編碼方式,由之前的曼徹斯特編碼變為QPSK(正交相移鍵控)編碼,每個符合2bit數據,因此…

隨手記:多行文本域存數據有換行,回顯數據換行展示

1.在新增的時候存儲數據 <el-input type"textarea"v-model"XXXX"></el-input> 2.詳情頁返回的數據&#xff1a; replace一頓操作確實復雜 最快的方法直接寫個樣式:style"white-space: pre-line" 即可行內或者class樣式都可以 …

B2126 連續出現的字符

連續出現的字符 題目描述 給定一個字符串&#xff0c;在字符串中尋找第一個連續出現次數不低于 k k k 次的字符。 輸入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是僅包含大小寫字母的字符串。 輸出格式 字符串中第一個連續出現次數不低于 k 次的字符…

Python面試寶典:Python中與動態規劃和排序算法相關的面試筆試題(1000加面試筆試題助你輕松捕獲大廠Offer)

Python面試寶典:1000加python面試題助你輕松捕獲大廠Offer【第二部分:Python高級特性:第十二章:高級數據結構和算法:第二節:Python中實現各類高級數據結構與算法三】 第十二章:高級數據結構和算法第二節:Python中實現各類高級數據結構與算法2.3、python中與動態規劃和排…

網頁如何給js后臺傳遞數字類型參數

網頁無法通過get方法傳遞數字參數給js后臺&#xff0c;就是網頁端寫的是數字參數&#xff0c;傳遞給后臺也變成了數字字符串。而js對數字類型和字符串類型是不相同的。由于我們的代碼是通過中間件掛載接口的&#xff0c;通過joi庫檢查參數。 const Joi require(joi); //注意&…

秋招突擊——算法打卡——5/28——復習{Z字形變換、兩數之和}——新做:{整數反轉、字符串轉整數}

文章目錄 復習Z字形變換實現代碼參考代碼 兩數之和復習代碼 新作整數反轉個人實現實現代碼 參考做法字符串轉換整數個人解法 分析總結 復習 Z字形變換 實現代碼 這里使用了他的思想&#xff0c;但是沒有用他的代碼&#xff0c;雖然已經比上次簡潔了&#xff0c;但是還是不夠&…

【日記】終于鼓起勇氣買了吹風機!(356 字)

正文 好忙。今天比昨天還要忙&#xff0c;水都沒喝幾口。嗯&#xff0c;好像只喝了兩口。 今天補了一份印鑒卡&#xff0c;銷了一個戶&#xff0c;變了一個戶&#xff0c;弄了一大堆資料找人簽字&#xff0c;還順帶要解決一個押品的歷史遺留問題。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 關鍵字

this 關鍵字是許多編程語言中的一個核心概念&#xff0c;在面向對象編程&#xff08;OOP&#xff09;中尤為重要。在JavaScript、Java、C、C#等語言中&#xff0c;this 扮演著至關重要的角色。理解 this 的意義和用法&#xff0c;對于編寫清晰、有效的代碼至關重要。 什么是th…

超分論文走讀

codeFormer 原始動機 高度不確定性&#xff0c;模糊到高清&#xff0c;存在一對多的映射紋理細節丟失人臉身份信息丟失 模型實現 訓練VQGAN 從而得到HQ碼本空間作為本文的離散人臉先驗。為了降低LQ-HQ映射之間的不確定性&#xff0c;我們設計盡量小的碼本空間和盡量短的Code…

ECS搭建2.8版本的redis

要在ECS&#xff08;Elastic Compute Service&#xff09;上手動搭建Redis 2.8版本&#xff0c;你可以按照以下步驟操作&#xff1a; 步驟1&#xff1a;更新系統和安裝依賴 首先&#xff0c;登錄到你的ECS實例&#xff0c;確保系統是最新的并安裝必要的依賴包&#xff1a; s…

運營推廣最容易被忽略的細節!用短鏈接推廣必須要掌握這些要點!

短鏈接是目前很多企業進行網絡推廣最常用的方式之一&#xff0c;是引流轉化的重要橋梁&#xff0c;很多工作者可能覺得用短鏈接推廣&#xff0c;只需要簡簡單單的把生成好的短鏈接放上去就行&#xff0c;但是實際上有很多細節要點是需要著重注意的&#xff0c;今天小編就圍繞這…

做外貿怎么給新老客戶定價

通常情況下我們對于新客戶的關注點要比老客戶更多一些&#xff0c;大概是因為新客戶的開發周期比較長而且不確定性也很大。 但是對于一些返單的老客戶對比來講&#xff0c;老客戶的穩定性就會相對來說增加很多&#xff0c;如果款式規格都是固定的&#xff0c;那么老客戶從選品…

[AIGC] Nginx常用變量詳解

Nginx非常強大&#xff0c;其主要功能包括HTTP服務器、反向代理、負載均衡等。Nginx的配置中有許多內置的變量&#xff0c;你可以在配置文件中使用這些變量進行靈活的配置。在本篇文章中&#xff0c;我們將介紹一些Nginx中常見的變量&#xff0c;包括proxy_add_header。 常見變…