主頁 >  其他 > unity3D數學基礎-坐標系、向量、矩陣

unity3D數學基礎-坐標系、向量、矩陣

2021-10-20 09:33:09 其他


坐標系

左右手坐標系

  1. 左手坐標系:伸開左手,大拇指指向X軸正方向,食指指向Y軸正方向,其他三個手指指向Z軸正方向,
  2. 右手坐標系:伸開右手,大拇指指向X軸正方向,食指指向Y軸正方向,其他三個手指指向Z軸正方向,
    請添加圖片描述請添加圖片描述請添加圖片描述

3D笛卡爾坐標系:右手坐標系
OpenGL:右手坐標系
Direct3D:左手坐標系
Unity3D:左手坐標系(世界坐標系),即+x, +y, +z分別指向右方,上方和前方,????

各種坐標空間(坐標系)

部分空間種類

  1. 模型空間
  • unity約定:使用的左手坐標系,XYZ分別對應著右上前,
  • 模型空間的原點和坐標軸通常由美術人員在建模軟體里確定好的,當匯入到unity中,我們可以在頂點著色器中訪問到模型的頂點資訊,其中包含了每個頂點的坐標,這些坐標都是相對于模型空間中的原點(通常位于模型的重心)定義的,
  • 檢視視圖中顯示的為localPosition的值,
  • transform.localPosition(本地坐標)可以獲得物體在父物體的區域坐標系中的位置點,
  1. 世界空間
  • unity約定:使用左手坐標系,但它的XYZ軸是固定不變的,
  • transform.position來獲取游戲物件的世界坐標,
  1. 觀察空間
  • 右手坐標系,這是符合OpenGL傳統的,再這樣的觀察空間中,攝像機的正前方向指的是-z軸方向,
  • unity約定:攝像機位于原點,+x軸指向右方,+y軸指向上分,而+z軸指向的是攝像機的后方,
  1. 裁切空間
  • 目標是能夠方便地對渲染圖元進行裁剪:完全位于這塊空間內部的圖元將會被保留,完全位于這塊空間外部的圖元將會被剔除,而與這塊空間邊界相交的圖元就會被裁剪,
  • 這塊空間是由視椎體來決定,
  1. 螢屏空間
  • 左手坐標系
  • 以像素來定義的,螢屏的左下角為(0,0),右上角為(Screen.width, Screen.height),z軸的坐標是相機的世界坐標中z軸坐標的負值,
  • 螢屏空間是一個二維空間,
  • 滑鼠位置坐標屬于螢屏坐標,通過Input.mousePosition可以獲得該位置的坐標,
  • 手指觸摸螢屏也為螢屏坐標,Input.GetTouch(0).position可以獲得單個手指觸摸螢屏時手指的坐標,
  1. 視口空間
  • 將Game視圖的螢屏坐標系單位化
  • 左下角(0,0),右上角(1,1),z軸的坐標是相機的世界坐標中z軸坐標的負值,

相互空間轉換

  1. shader中空間轉換
    shader處理流程
  • 模型變換:頂點變換的第一步就是將頂點從模型空間變換到世界空間中,這個變換通常叫做模型變換,注意這里的變換順序是不能互換的,即先進行縮放,然后進行旋轉,最后是平移,然后我們可以構建出模型變換的變換矩陣(因為矩陣不滿足交換律,所以不要隨便調換變換順序)
  • 觀察變換:頂點變換的第二步,就是將頂點坐標從世界空間變換到觀察空間中,這個變換通常叫做觀察變換,一種方法是計算觀察空間中的三個坐標軸在世界空間下的表示,然后構建出觀察空間變換到世界空間的變換矩陣,再對該矩陣求逆得到從世界空間變換到觀察空間的變換矩陣,另一種方法是想象平移整個觀察空間,讓攝像機原點位于世界坐標的原點,坐標軸與世界空間中的坐標軸重合即可
  • 投影變換:頂點變換的第三步,就是將頂點坐標從觀察空間變換到裁切空間(也被稱為齊次裁剪空間)中,這個變換通常叫做投影變換,這個用于變換的矩陣叫做裁剪矩陣,也被稱為投影矩陣,
    • 目的:首先是為投影做準備,真正的投影發生在后面的齊次除法程序中,而經過投影矩陣變換后,頂點的w分量將會有特殊的意義;其次是對x,y,z分量進行縮放,
    • 視椎體指的是空間中的一塊區域,這塊區域決定了攝像機可以看到的空間,視椎體由兩種型別,這涉及兩種投影:一種是正交投影,一種是透視投影,
    • 投影:可以理解成一個空間的降維,例如從四維空間投影到三維空間,而投影矩陣實際上并不會真正的進行投影,它會為真正的投影做準備作業,真正的投影會在螢屏映射時發生,通過齊次除法來得到二維坐標,
  • 螢屏映射:就是把頂點從裁剪空間投影到螢屏空間中,來生成對應的2D坐標,在unity中,從裁剪空間到螢屏空間的轉換一般是底層幫我們完成的,我們頂點著色器只需要把頂點轉換到裁剪空間即可,最后由此通過齊次除法和映射到螢屏,——分為兩個步驟:首先進行標準齊次除法,也被稱為透視除法,就是用齊次坐標系的w分量去除以x,y,z分量;經過齊次除法后,透視投影和正交投影的視椎體都變換到一個相同的立方體內,接下來可以根據 變換后的x和y坐標來映射輸出視窗的對應像素坐標,
  1. unity中C#相關API
  • Transform.forward, Transform.right, Transform.up:當前物體的物體坐標系的z軸,x軸,y軸在世界坐標系上的指向,
  • Transform.TransformPoint(Vector3 position) :將一個坐標點從區域坐標系轉換到全域坐標系,
  • Transform.InverseTransformPoint(Vector3 position):將坐標點從全域坐標系轉換到區域坐標系,
  • Transform.TransformDirection(Vector3 direction):將一個方向從區域坐標系轉換到全域坐標系,
  • Transform.InverseTransformDirection(Vector3 direction):將一個方向從全域坐標系轉換到區域坐標系,
  • Transform.TransformVector(Vector3 vector):將一個向量從區域坐標系轉換到全域坐標系,
  • Transform.InverseTransformVector(Vector3 vector):將一個向量從全域坐標系轉換到區域坐標系,
  • Camera.ScreenToWorldPoint(Vector3 position): 將螢屏坐標轉換為全域坐標,
  • Camera.WorldToScreenPoint(Vector3 position):將全域坐標轉換為螢屏坐標,
  • Camera.ScreenToViewportPoint(Vector3 position):將螢屏坐標轉換為視口坐標,
  • Camera.ViewportToScreenPoint(Vector3 position):將視口坐標轉換為螢屏坐標,
  • Camera.WorldToViewportPoint(Vector3 position):將全域坐標轉換為視口坐標,
  • Camera.ViewportToWorldPoint(Vector3 position):將視口坐標轉換為全域坐標,

向量

認識向量

  • 在數學中,向量(也稱為矢量),是指具有大小和方向的量;書寫向量時,水平書寫的向量叫做行向量
    [ 1 2 3 ] \begin{bmatrix} 1 & 2 & 3 \end{bmatrix} [1?2?3?]
    垂直書寫的向量叫做列向量,
    [ 1 2 3 ] \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} ???123????
  • 向量的大小就是向量的長度,也叫做模,向量的方向描述了空間中向量的指向;向量中的數表達了向量在每個維度上的有向位移,
  • 點中的數表示了一個位置,它沒有大小、方向的概念;點只有位置,適量只有方向和大小,任何一個點都可以表示成一個從原點出發的矢量,

向量運算

特殊向量

  1. 零向量:大小為0,沒有方向的向量,并且它不可以被歸一化,
  2. 負向量:向量變負,將得到一個和原向量方向相反、大小相等的向量,
  3. 單位向量:也叫做標準化向量,就是大小為1的向量;對任意的非零向量,我們都可以計算出它的單位向量,即將其歸一化(normalization),單位向量的表示
    a ^ = a ∣ a ∣ \widehat{\bf{a}} =\frac{\bf{a}}{\begin{vmatrix} \bf{a} \end{vmatrix}} a =?a??a?
  4. 在Unity中,可以使用Vector3.Normalize來歸一化向量,使用Vector3.normalized來獲得歸一化后的單位向量;Vector3.Normalize改變當前向量,Vector3.normalized當前向量是不改變的并且回傳一個新的規范化的向量,

向量的長度

  1. 即向量的大小,或者向量的模,
  2. 向量的大小就是向量各分量平方和的平方根
  3. 在Unity中,可以通過Vector3.magnitude計算向量的長度,Vector3.sqrMagnitude則回傳向量長度的平方;Vector3.Distance(A,B)可以計算2個點A,B之間的距離,即回傳向量AB或向量BA的長度,

向量與標量的乘/除法

  1. 向量與標量的乘法,即將向量的每個分量分別與標量相乘,
  2. 向量與非零標量的除法,即乘以該標量的倒數,

向量的加/減法

  1. 只有在兩個向量的維度相同時,才可以相加或相減,
  2. 向量的加法和減法,即將向量的各個分量相加或相減,
  3. 向量的加法滿足交換律和結合律,向量的減法僅滿足結合律,
  4. 幾何意義:對于加法,我們可以把矢量a的頭連接到矢量b的尾,然后畫一條從a的尾到b的頭的矢量,來得到a和b相加后的矢量,減法類似
  5. 公式: a ? + b ? = ( a x + b x , a y + b y , a z + b z ) a ? ? b ? = ( a x ? b x , a y ? b y , a z ? b z ) \vec{a} + \vec{b}=(a_x+b_x,a_y+b_y,a_z+b_z) \\ \vec{a} - \vec{b}=(a_x-b_x,a_y-b_y,a_z-b_z) a +b =(ax?+bx?,ay?+by?,az?+bz?)a ?b =(ax??bx?,ay??by?,az??bz?)

向量的點積

  1. 也叫做向量的內積,表示如下:其中點不可以省略
    a ? ? b ? \vec{a} \cdot \vec{b} a ?b
  2. 兩種計算公式如下:
    a ? ? b ? = ∣ a ? ∣ ∣ b ? ∣ cos ? θ a ? ? b ? = ( a x b x + a y b y + a z b z ) \vec{a} \cdot \vec{b}=\rvert \vec{a} \rvert \rvert \vec{b} \rvert \cos \theta \\ \vec{a} \cdot \vec{b}=(a_xb_x+a_yb_y+a_zb_z) a ?b =a b cosθa ?b =(ax?bx?+ay?by?+az?bz?)
  3. 點積滿足交換律,
  4. 向量點積的結果是一個標量
  5. 幾何意義:
    • 點乘結果描述了兩個向量的“相似”程度,點乘結果越大,兩向量越相近
    • 投影:向量b在向量a上的投影的長度可以表示為
      ∣ b ? → a ? ∣ = ∣ b ? ∣ cos ? θ = a ? ? b ? ∣ a ? ∣ \begin{vmatrix} \vec{b} \to \vec{a} \end{vmatrix}=\begin{vmatrix} \vec{b} \end{vmatrix} \cos \theta=\frac{\vec{a} \cdot \vec{b}}{\begin{vmatrix} \vec{a} \end{vmatrix}} ?b a ??=?b ??cosθ=?a ??a ?b ?
  6. 重要性質:
    • 點積可結合標量乘法
      ( k a ? ) ? b ? = a ? ? ( k b ? ) = k ( a ? ? b ? ) (k \vec{a}) \cdot \vec{b} = \vec{a} \cdot (k \vec{b})=k ( \vec{a} \cdot \vec{b}) (ka )?b =a ?(kb )=k(a ?b )
    • 點積可結合矢量加減法
      a ? ? ( b ? + c ? ) = a ? ? b ? + a ? ? c ? \vec{a} \cdot ( \vec{b}+\vec{c}) = \vec{a} \cdot \vec{b}+\vec{a} \cdot \vec{c} a ?(b +c )=a ?b +a ?c
    • 一個矢量和本身進行點積的結果是該矢量的模的平方

向量的叉積

  1. 也叫做向量的外積,表示如下:其中叉不可以省略
    a ? × b ? \vec{a} \times \vec{b} a ×b
  2. 計算公式如下:
    [ x 1 y 1 z 1 ] × [ x 2 y 2 z 2 ] = [ y 1 z 2 ? z 1 y 2 z 1 x 2 ? x 1 z 2 x 1 y 2 ? y 1 x 2 ] \begin{bmatrix} x_{1}\\ y_{1}\\ z_{1} \end{bmatrix}\times\begin{bmatrix} x_{2}\\ y_{2}\\ z_{2} \end{bmatrix} =\begin{bmatrix} y_{1}z_{2}-z_{1}y_{2}\\ z_{1}x_{2}-x_{1}z_{2}\\ x_{1}y_{2}-y_{1}x_{2} \end{bmatrix} ???x1?y1?z1?????×???x2?y2?z2?????=???y1?z2??z1?y2?z1?x2??x1?z2?x1?y2??y1?x2?????
  3. 三重積: a ? ? b ? × c ? = a ? ? ( b ? × c ? ) \vec{a} \cdot \vec{b} \times \vec{c}=\vec{a} \cdot (\vec{b} \times \vec{c}) a ?b ×c =a ?(b ×c )
  4. 點積不滿足交換律,也不滿足結合律,
  5. 向量叉積的結果仍是一個向量
  6. 幾何意義:
    • 叉乘得到的向量垂直于原來的兩個向量
    • 叉乘的長度等于向量的大小與向量夾角sin值的積
      ∣ a ? × b ? ∣ = ∣ a ? ∣ ∣ b ? ∣ sin ? θ \begin{vmatrix} \vec{a} \times \vec{b} \end{vmatrix} = \begin{vmatrix} \vec{a} \end{vmatrix} \begin{vmatrix} \vec{b} \end{vmatrix} \sin \theta ?a ×b ??=?a ???b ??sinθ
    • 叉乘的長度也等于以ab為兩邊的平行四邊形的面積

矩陣

認識矩陣

  • 在數學中,矩陣是一個按照長方陣排列的復數或實數的集合,
  • 在一個m×n的矩陣A中,有m×n個數,這些數稱為矩陣A的元素,數 aij 位于矩陣的第i行,第j列,稱為矩陣A的(i,j)元素,
  • 矩陣中元素的下標是從1開始的,
    [ a 11 a 12 a 13 ? a 1 j a 21 a 22 a 23 ? a 2 j ? ? ? ? ? a i 1 a i 2 a i 3 ? a i j ] \begin{bmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1j} \\ a_{21} & a_{22} & a_{23} & \cdots & a_{2j} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ a_{i1} & a_{i2} & a_{i3} & \cdots &a_{ij} \\ \end{bmatrix} ??????a11?a21??ai1??a12?a22??ai2??a13?a23??ai3???????a1j?a2j??aij????????

矩陣和標量的乘法

  • 矩陣和標量相乘,得到的仍然是一個相同維度的矩陣,矩陣和標量的乘法,即矩陣的每個元素和該標量相乘

矩陣和矩陣的加/減法

  • 只有維度相同的矩陣,才可以相加相減
  • 矩陣和矩陣的相加/相減即矩陣各相同位置的元素的相加相減

矩陣和矩陣的乘法

  • 公式:一個r×n的矩陣A和一個n×c的矩陣B相乘,它們的結果AB將會是一個r×c大小的矩陣,這里第一個矩陣的列數必須和第二個矩陣的行數相同,他們相乘得到的矩陣的行數是第一個矩陣的行數,列數是第二個矩陣的列數,
  • 演示:請添加圖片描述
  • 矩陣乘法不滿足交換律,但是滿足結合律及以下關系: A B ≠ B A ( A B ) C = A ( B C ) A B = B T A \mathbf{AB}\neq \mathbf{BA} \\ \left ( \mathbf{AB} \right )\mathbf{C}= \mathbf{A}\left ( \mathbf{BC} \right ) \\ \mathbf{AB}= \mathbf{B^{T}A} AB?=BA(AB)C=A(BC)AB=BTA
  • 矩陣的幾何意義
    1. 方陣的的行能被解釋為坐標系的基向量;
    2. 為了將向量從原坐標系變換到新坐標系,用它乘以一個矩陣;
    3. 從原坐標系到這些基向量定義的新坐標系的變換是一種線性變換;線性變換保持直線和平行線,但角度、長度、面積和體積可能會被改變,
    4. 零向量乘以任何矩陣仍然得到零向量,因此,方陣代表的線性變換的原點和原坐標系的原點一致,變換不包含原點,
    5. 可以通過想象變換后的坐標系的基向量來想象矩陣,這些基向量在2D中構成“L”型,在3D中構成“三角架”型,

如何理解矩陣相乘的幾何意義或現實意義?

  • 向量和矩陣相乘:行向量左乘矩陣時,結果是行向量;列向量右乘矩陣時,結果是列向量,其他相乘順序是不允許的,

特殊矩陣

方陣

  • 行數和列數相等的矩陣被稱為方塊矩陣

對角矩陣

  • 對角線元素:方陣中行號和列號相同的元素,其他元素為非對角線元素
  • 如果一個矩陣除了對角元素外的所有元素都為0,那么這個矩陣就叫做對角矩陣

單位矩陣

  • 對角線元素為1,其他元素為0,(乘法單位元)

轉置矩陣

  • 一個r×c矩陣M,M的轉置記作 M T \bf M^T MT是一個c×r矩陣,它的列由M的行組成,即
    M i j T = M j i M_{ij}^{T}=M_{ji} MijT?=Mji?
  • 性質1:矩陣轉置的轉置等于原矩陣:
    ( M T ) T = M \left (\mathbf{M} ^{T}\right )^{T}=\mathbf{M} (MT)T=M
  • 性質2:矩陣串接的轉置等于反向串接各個矩陣的轉置:
    ( A B ) T = B T A T \left ( \mathbf{AB} \right )^{T}=\mathbf{B}^{T}\mathbf{A}^{T} (AB)T=BTAT

逆矩陣

  • 給定一個方陣M,它的逆矩陣表示:
    M ? 1 \bf{M}^{-1} M?1
  • 如果一個矩陣有相應的逆矩陣,則可以說這個矩陣是可逆的,或者說是非奇異的,如果一個矩陣沒有相應的逆矩陣,則可以說這個矩陣是不可逆的,或者說是奇異的,
  • 性質1:只有方塊矩陣才可能有逆矩陣,因為一個矩陣A和它的逆矩陣B需要滿足條件:AB = I(I是單位矩陣),
    M M ? 1 = M ? 1 M = I \mathbf{M}\mathbf{M}^{-1}=\mathbf{M}^{-1}\mathbf{M}=\mathbf{I} MM?1=M?1M=I
  • 性質2:逆矩陣的逆矩陣是原矩陣本身,
    ( M ? 1 ) ? 1 = M \left ( \mathbf{M}^{-1} \right )^{-1}=\mathbf{M} (M?1)?1=M
  • 性質3:單位矩陣的逆矩陣是它本身
    I ? 1 = I \mathbf{I}^{-1}=\mathbf{I} I?1=I
  • 性質4:轉置矩陣的逆矩陣是逆矩陣的轉置
    ( M T ) ? 1 = ( M ? 1 ) T \left ( \mathbf{M}^{T} \right )^{-1}=\left ( \mathbf{M}^{-1} \right )^{T} (MT)?1=(M?1)T
  • 性質5:矩陣串接相乘后的逆矩陣等于反向串接各個矩陣的逆矩陣(這個性質可以擴展到更多矩陣相乘)
    ( A B ) ? 1 = B ? 1 A ? 1 \left ( \mathbf{AB} \right )^{-1}=\mathbf{B}^{-1}\mathbf{A}^{-1} (AB)?1=B?1A?1
  • 對于所有元素都為0的矩陣,沒有對應的逆矩陣,
  • ?矩陣的逆的幾何解釋:如果向量v用矩陣M來進行變換,接著用M的逆進行變換,將會得到原向量,

正交矩陣

  • 如果一個方陣M和它的轉置矩陣的乘積是單位矩陣的話,我們就說這個矩陣是正交的: M M T = M T M = I \mathbf{M}\mathbf{M}^{T}=\mathbf{M}^{T}\mathbf{M}=\mathbf{I} MMT=MTM=I

  • 推理:如果一個矩陣是正交的,那么它的轉置矩陣和逆矩陣是一樣的,

  • 幾何意義:若一個矩陣是正交矩陣,它必須滿足下列條件:

    1. 矩陣的每一行都是單位向量
    2. 矩陣的所有行互相垂直
  • 線性代數中一組向量互相垂直,這組向量被認為是正交基;如果他們同時滿足都是單位向量,則稱他們是標準正交基

矩陣的行列式

  • 定義
    • 在任意方陣中都存在一個標量,稱作該方陣的行列式;非方陣的行列式是未定義的,
      在書寫行列式時,兩邊用豎線將數字塊圍起來,省略方括號,
    • 2D:幫助記憶法:將主對角線和反對角線上的元素各自相乘,然后用主對角線元素的積減去反對角線元素的積,
      ∣ M ∣ = ∣ m 11 m 12 m 21 m 22 ∣ = m 11 m 22 ? m 12 m 21 \left | M \right |=\begin{vmatrix} m_{11} &m_{12} \\ m_{21} & m_{22} \end{vmatrix}=m_{11}m_{22}-m_{12}m_{21} M=?m11?m21??m12?m22???=m11?m22??m12?m21?
    • 3D:幫助記憶法:把矩陣M連寫兩遍,將主對角線上的元素和反對角線上的元素各自相乘,然后用主對角線上元素積的和減去反對角線上元素積的和,
      ∣ M ∣ = ∣ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ∣ = m 11 m 22 m 33 + m 12 m 23 m 31 + m 13 m 21 m 32 ? m 13 m 22 m 31 ? m 12 m 21 m 33 ? m 11 m 23 m 32 = m 11 ( m 22 m 33 ? m 23 m 32 ) + m 12 ( m 23 m 31 ? m 21 m 33 ) + m 13 ( m 21 m 32 ? m 22 m 31 ) \left | M \right |=\begin{vmatrix} m_{11} & m_{12} &m_{13} \\ m_{21} & m_{22} &m_{23} \\ m_{31} & m_{32} &m_{33} \end{vmatrix}=m_{11}m_{22}m_{33}+m_{12}m_{23}m_{31}+m_{13}m_{21}m_{32}-m_{13}m_{22}m_{31}-m_{12}m_{21}m_{33}-m_{11}m_{23}m_{32}=m_{11}(m_{22}m_{33}-m_{23}m_{32})+m_{12}(m_{23}m_{31}-m_{21}m_{33})+m_{13}(m_{21}m_{32}-m_{22}m_{31}) M=?m11?m21?m31??m12?m22?m32??m13?m23?m33???=m11?m22?m33?+m12?m23?m31?+m13?m21?m32??m13?m22?m31??m12?m21?m33??m11?m23?m32?=m11?(m22?m33??m23?m32?)+m12?(m23?m31??m21?m33?)+m13?(m21?m32??m22?m31?)
    • 在這里插入圖片描述
  • 行列式的一些性質:
    • 任意行或列的非零積加到另一行或列上不會改變行列式的值
    • 交換矩陣的任意兩行或兩列,行列式變負
    • 如果矩陣的任意行或列全為零,那么它的行列式等于零
    • 矩陣積的行列式等于矩陣行列式的積;這個性質可以擴展到多個矩陣情況.
      ∣ A B ∣ = ∣ A ∣ ∣ B ∣ \left | AB \right |=\left| A \right|\left| B \right| AB=AB
    • 矩陣轉置的行列式等于原矩陣的行列式,
      ∣ M T ∣ = ∣ M ∣ \left | M^{T} \right |=\left | M \right | ?MT?=M
  • 矩陣的行列式的幾何意義:
    • 2D中,行列式等于以基向量為兩邊的平行四邊形的有符號面積;(有符號面積是指如果平行四邊形相對于遠來的方位“翻轉”,那么面積變負,)
    • 3D中,行列式等于以變換后的基向量為三邊的平行六面體的有符號體積,3D中,如果變換使得平行六面體“由里向外”翻轉,則行列式變負,
    • 行列式和矩陣變換導致的尺寸改變相關,其中行列式的絕對值和面積(2D),體積(3D)的改變相關,行列式的符號說明了變換矩陣是否包含鏡像或投影,
    • 矩陣的行列式還可以對矩陣所代表的變換分類:如果矩陣行列式為零,那么該矩陣包含投影;如果矩陣行列式為負,那么該矩陣包含鏡像,

變換

齊次坐標

齊次坐標就是將一個原本是n維的向量用一個n+1維向量來表示,是指一個用于投影幾何里的坐標系統,如同用于歐氏幾何里的笛卡兒坐標一般,

線性變換

  • 定義:從代數上,是指可以保留矢量加和標量乘的變換,需要滿足下面的2個條件,
    A ( α + β ) = A ( α ) + A ( β ) A ( k α ) = k A ( α ) A(α+β)=A(α)+A(β)\\[1ex] A (kα)=kA(α) A(α+β)=Aα+AβA(kα)=kA(α)
    從幾何的角度上去理解,需要滿足:
    1. 變換前是直線的,變換后依然是直線,
    2. 直線比例保持不變,
    3. 變換前是原點的,變換后依然是原點,
  • 旋轉和縮放都屬于線性變換
    1. 旋轉
      2D旋轉
      R ( θ ) = [ p ′ q ′ ] = [ c o s θ s i n θ ? s i n θ c o s θ ] R(\theta )=\begin{bmatrix} p^{'}\\ q^{'} \end{bmatrix}=\begin{bmatrix} cos\theta & sin\theta \\ -sin\theta & cos\theta \end{bmatrix} R(θ)=[pq?]=[cosθ?sinθ?sinθcosθ?]
      3D旋轉
      繞X軸
      R ( θ ) = [ p ′ q ′ r ′ ] = [ 1 0 0 0 c o s θ s i n θ 0 ? s i n θ c o s θ ] R(\theta )=\begin{bmatrix} p^{'}\\ q^{'}\\ r^{'} \end{bmatrix}=\begin{bmatrix} 1&0&0 \\ 0&cos\theta&sin\theta \\ 0&-sin\theta&cos\theta \end{bmatrix} R(θ)=???pqr????=???100?0cosθ?sinθ?0sinθcosθ????
      繞Y軸
      R ( θ ) = [ p ′ q ′ r ′ ] = [ c o s θ 0 ? s i n θ 0 1 0 s i n θ 0 c o s θ ] R(\theta )=\begin{bmatrix} p^{'}\\ q^{'}\\ r^{'} \end{bmatrix}=\begin{bmatrix} cos\theta&0&-sin\theta \\ 0&1&0 \\ sin\theta&0&cos\theta \end{bmatrix} R(θ)=???pqr????=???cosθ0sinθ?010??sinθ0cosθ????
      繞Z軸
      R ( θ ) = [ p ′ q ′ r ′ ] = [ c o s θ s i n θ 0 ? s i n θ c o s θ 0 0 0 1 ] R(\theta )=\begin{bmatrix} p^{'}\\ q^{'}\\ r^{'} \end{bmatrix}=\begin{bmatrix} cos\theta&sin\theta&0 \\ -sin\theta&cos\theta&0 \\ 0&0&1 \end{bmatrix} R(θ)=???pqr????=???cosθ?sinθ0?sinθcosθ0?001????
      2.縮放(沿著每個坐標軸應用單獨的縮放因子k)
      2D縮放
      S ( k x , k y ) = [ p ′ q ′ ] = [ k x 0 0 k y ] S(k_{x},k_{y})=\begin{bmatrix} p^{'} \\ q^{'} \end{bmatrix}=\begin{bmatrix} k_{x} & 0\\ 0 & k_{y} \end{bmatrix} S(kx?,ky?)=[pq?]=[kx?0?0ky??]
      3D縮放
      S ( k x , k y , k y ) = [ p ′ q ′ r ′ ] = [ k x 0 0 0 k y 0 0 0 k z ] S(k_{x},k_{y},k_{y})=\begin{bmatrix} p^{'} \\ q^{'} \\ r^{'} \end{bmatrix}=\begin{bmatrix} k_{x}&0&0 \\ 0&k_{y}&0 \\ 0&0&k_{z} \end{bmatrix} S(kx?,ky?,ky?)=???pqr????=???kx?00?0ky?0?00kz?????

仿射變換

  • 定義:從幾何的角度去理解,需要滿足:
    1. 變換前是直線的,變換后依然是直線,
    2. 直線比例保持不變,
  • 推理:平移、旋轉、縮放都屬于仿射變換,
    1. 對點平移
      [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] = [ x + t x y + t y z + t z 1 ] \begin{bmatrix} 1 & 0 & 0 & t_{x}\\ 0 & 1 & 0 & t_{y}\\ 0 & 0 & 1 & t_{z}\\ 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}=\begin{bmatrix} x+t_{x}\\ y+t_{y}\\ z+t_{z}\\ 1 \end{bmatrix} ?????1000?0100?0010?tx?ty?tz?1???????????xyz1??????=?????x+tx?y+ty?z+tz?1??????
    2. 性質
      1、平移變換不會對方向矢量產生任何影響,
      2、平移矩陣的逆矩陣就是反向平移得到的矩陣
    3. 復合變換
      由于上面我們使用的是列矩陣,因此閱讀順序是從右向左,即先縮放,在旋轉,最后平移,順序很重要,
      在這里插入圖片描述
  • 透視投影
    1. 將3D空間投影到2D平面上,該平面稱作投影平面,使用的是正交投影,正交投影也稱作平行投影;透視投影的投影線不再是平行的,它們相交于一點,該點稱作投影中心,因為投影中心在投影平面前面,投影線到達平面之前已經相交,所以投影平面上的影像是翻轉的,,,當物體原理投影中心時,正交投影仍保持不變,但透視投影變小了,這種視覺現象稱作透視縮略,
    2. 小孔成像:
      公式:(向z=d平面投影)
      p ′ = [ x ′ y ′ z ′ ] = [ d x / z d y / z d ] {p}'=\begin{bmatrix} {x}'\\ {y}'\\ {z}' \end{bmatrix}=\begin{bmatrix} dx/z\\ dy/z\\ d \end{bmatrix} p=???xyz????=???dx/zdy/zd????
      使用矩陣進行透視投影
      [ x y z 1 ] [ 1 0 0 0 0 1 0 0 0 0 1 1 / d 0 0 0 0 ] = [ x y z z / d ] \begin{bmatrix} x & y & z & 1 \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 1/d\\ 0 & 0 & 0 & 0 \end{bmatrix}=\begin{bmatrix} x & y & z & z/d \end{bmatrix} [x?y?z?1?]?????1000?0100?0010?001/d0??????=[x?y?z?z/d?]
  • unity相關API
    1. 使用Matrix4x4.Translate創建一個平移矩陣,
    2. 使用Matrix4x4.Rotate創建一個旋轉矩陣,
    3. 使用Matrix4x4.Scale創建一個縮放矩陣,
    4. 使用Matrix4x4.TRS創建一個移動、旋轉、縮放的復合矩陣,
    5. 使用Matrix4x4.MultiplyPoint或者Matrix4x4.MultiplyPoint3x4來變換一個點,
    6. 使用Matrix4x4.MultiplyVector來變換一個向量,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325851.html

標籤:其他

上一篇:ROS2機器人實驗報告提示07?∞?

下一篇:Unity 之 Mac包運行本地日志位置

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more