2012年4月4日 星期三

基本向量運算

    為了理解三個維度的向量運算,在圖示方面我們使用二維的圖示。這兩者在理解上差異不大,但對初接觸的人來說,用二維的圖示較為容易理解。

常見的三維向量運算有以下幾種:
  • 向量長度
  • 向量縮放
  • 加法、減法
  • 正規化
  • 內積運算
  • 外積運算
  • 座標系統轉換

    在理解所有的運算時,第一要務是,將運算的基準點設定成原點O來理解。 也就是說,不論運算的基準點在空間的何處,我們都必須先將運算時的座標系原點設定成該基準點。以專業一點的文字來說的話,就是我們在理解向量的運算時,是以基準點的區域座標系(local coordinate systems)來看。

    區域座標系的簡單定義就是,以運算基準點為原點的座標系統稱之為區域座標系。相對於區域座標系這個名詞,還有一個所謂的絕對座標系(global coordinate systems)。不過以理論上來說,所有的區域座標系都可以是絕對座標系,也就是說其實這兩者的差異並不大,差別只在於實際運用時,運用者的角度決定了兩者的差異。

    舉一個簡單的例子來說明,假設我們有一個母空間A,在A內還有兩個子空間B1, B2。這三個空間分別有三個不同的座標系統分別為Sa, Sb1, Sb2。 我們將視點放在A空間時,很明顯的Sa可視為絕對座標系,而Sb1及Sb2則為區域座標系。而當我們把視點放在B1空間時,則Sb1則可視為絕對座標系,甚至在某些時候,還必須將Sa座標系視為區域座標系。

    說明至此,或許會造成看官們的混淆,筆者也不打算在此多加著墨。僅提出一個基本原則,在做向量運算時,第一步就是先定義出這一次的運算所使用的座標系統。至於這個系統到底被分類為絕對座標系或區域座標系,其實不是非常重要。

    另一個要先說明的事項是,除非我們有特別指定該運算用到了原點O,否則在我們的討論中,所有參與運算的向量都不可為零向量(各分量皆為0的向量)。 

    接下來,我們開始解釋向量的基本運算。以下圖為參考圖,我們先有一個原點O,接著有兩個向量A、B。將分量表現進去時則兩個向量為A(ax, ay, az)與B(bx, by, bz)。



我們依照前面列出的順序來說明相關的項目:
  1. 向量的長度

  2.     首先我們先了解向量的長度。向量的長度定義很簡單,A向量的長度length(A)被定義成點向量A到原點O之間的長度。相同的,B向量的長度則為點向量B到原點O之間的距離。我們用下面這個簡單的數學式描述:
         length(A)=L(A)=sqrt(ax2 + ay2 + az2)。
        同理 L(B)=sqrt(bx2+ by2 + bz2)。

  3. 向量的縮放

  4.     有了向量的長度之後,便可定義向量的縮放。在定義上,向量A放大到原本的兩倍成為了向量C時,代表著向量C與向量A有著相同的方向,而向量C的長度是向量A的兩倍。用數學式表示時,假設向量C為向量A縮放成 k 倍後的向量時,則C = k*A。在將分量放進去考慮時:
        C(cx, cy, cz) = k * A( x, y, z),其中 cx = k*x, cy = k*y, cz = k*z

        接著我們來看一個例子,當縮放的倍數k為負一時,向量C是否有問題。C = (-1) * A,使用分量的運算式後,可以得到C(cx, cy, cz) = (-1) * A( x, y, z) = (-x, -y, -z) 的結果。由空間點座標的定義來分析時,我們可以發現點向量A相對於原點O的對稱點就是點向量C。也就是說,向量C的方向剛好與向量A相反,且向量C的長度相等於向量A的長度。換言之,以向量縮放的公式來看,該公式可以縮放負值的倍數,而負數的意義,代表著是向量方向改成原本方向的逆向。

  5. 向量的加法、減法

  6.     接著我們來了解向量的加法。對於向量A而言,我們可以認知到,所謂的A向量,若以點座標的概念來看時,A向量可以解釋為從原點O(0, 0, 0)往A向量的方向前進L(A)的距離,來到點向量A(ax, ay, az)的位置。同樣的B向量則是從原點O(0, 0, 0)往B向量的方向前進了L(B)的距離,來到點向量B(bx, by, bz)的位置。

        有了這樣的慨念後,我們對向量的加法做了下面的定義:向量A+向量B代表著,從原點O出發,往向量A的方向前進了L(A)的距離;然後往向量B的方向,前進了L(B)的距離;最後到達了點向量P1的位置。以數學式來看:P1=A+B。若再將分量放進去,則是:
        P1(p1x, p1y, p1z)=A(ax, ay, az) + B(bx, by, bz),

        其中 p1x = ax+bx, p1y = ay+by, p1z = az+bz

        從圖示來看,不論是先往向量A的方向前進或是先往向量B的方向前進,最後都會到達點座標P1的位置。用數學式來看,則是P1=A+B=B+A。這代表著,在向量的加法中,不論先加哪個向量,其結果不會因為運算的順序而改變。

        了解了向量加法後,現在來看向量的減法。在理解加法時,加上向量A意味著朝著向量A的方向前進了L(A)的距離。而在減法中,減掉向量A則是朝著A的反方向前進了L(A)的距離。所以如果要計算從原點O減掉向量A時,就代表著從原點O往向量A的反方向前進了L(A)的距離,而來到了點向量P3的位置。

        使用同樣的方式來看A-B這個運算結果,我們可以理解成,從原點往向量A的方向前進了L(A)的距離後,朝著向量B的反方向前進了L(B)的距離而來到了點向量P6的位置。以數學式來表示則是:P6=A-B。再將分量放進去時,得到:
        P6(p6x, p6y, p6z) = A(ax, ay, az) - B(bx, by, bz),
        其中 p6x = ax-bx, p6y = ay-by, p6z = az-bz

        說明至此,筆者已盡可能的使用口語化的文字及幾何的方式來描述向量的加法與減法,希望能讓看倌們理解筆者所要表達的幾何意義。正規而言,筆者並沒有正確的說明在分量的表示式中,為何是上面的算式結果。要將分量的加減法說明清楚所需要的篇幅實在過大,筆者就此省略,請有興趣的看倌們參閱與線性代數(Linear Algebra)相關的書籍文獻。

        整合上面對向量加減法的說明,上面的圖例中的各點有著下面的數學式結果:
    • P1 = A + B
    • P2 = (-1) * A + B = B - A
    • P3 = (-1) * A = -A
    • P4 = (-1) * A + (-1) * B = -A -B
    • P5 = (-1) * B = -B
    • P6 = A + (-1) * B = A - B
        上面的數學式中,每個等號都可以有其獨立的幾何說法,請有興趣的看倌思考之。

  7. 向量的正規化

  8.     接下來,我們要說明的是,向量的正規化。在前一篇向量概念 - 笛卡爾座標中有提到單位方向向量這個特有向量。所謂的向量正規化就是計算出該向量的單位方向向量。也就是說,對於向量A而言,其正規化後的向量N(nx, ny, nz)是與向量A有著相同方向,且向量長度為1的單位向量。參考向量縮放的概念,向量A的長度為L(A),若要將長度縮放成單位長度1,則代表著要縮放成原本的 1/L(A) 倍。因此,正規化的數學式為:
        N(nx, ny, nz) = 1/L(A) * A(x, y, z),
        其中 nx = x / L(A), ny = y / L(A), nz = z / L(A)。

        若用口語的說法則是:對一個向量做正規化,就是將該向量的各分量除以該向量的長度即可。

  9. 向量的內積運算

  10.     在數學中,兩個向量的內積運算所得的結果是一個數值。其運算式如下:
        c = A ∙ B = A(ax, ay, az) ∙B(bx, by, bz) = ax*bx + ay*by + az*bz

        若要了解其幾何意義,有個與其相關的幾何公式可以參考:

        c = A ∙ B = L(A) * L(B) * cos(θ),其中 θ 為向量A與向量B之間的夾角。

        當我們使用這個公式時,若假設向量B是個單位向量時,我們會發現L(B)=1,也就是說上面的計算式會變成 A ∙ B = L(A) * cos(θ) 。配合上面的圖示,我們可以發現,當我們把向量A對一個單位向量B做內積運算後,其結果會等同於向量A垂直投影到單位向量B上的長度。我們在後面討論座標轉換運算時,會用到這個特性。

        另一個常被用到的特性是,當兩個向量長度都不為零的情況下,內積的運算結果若為零,代表著cos(θ)=0,也就是兩個向量相互垂直。

  11. 向量的外積運算

  12.     兩個向量的外積運算結果,會是另一個向量,這個向量會與運算前的兩向量相互垂直。以數學式表示,則如下:
        C(cx, cy, cz) = A(ax, ay, az) ╳ B(bx, by, bz),
        其中cx = ay*bz - az*by, cy = az*bx - ax*bz, cz = ax*by - ay*bx。

        而在幾何上,除了向量C垂直於向量A及向量C垂直於向量B之外,還有著L(C) = L(A) * L(B) * sin(θ)的特性( θ 為向量A與向量B之間的夾角)。

        在外積運算中,A╳B 的結果與 B╳A 是不同的,主要的差別在於兩者的方向正好相反,而正確的方向,可由右手定則來確認。以筆者的實作經驗來看,會被使用到的特性是與兩向量相互垂直,這個特性主要運用於建立新的座標系上。

  13. 座標系的轉換


  14.     在說明座標轉換時,我們先設定一些先決條件。O1為XYZ座標系的原點,其三個基準軸的單位向量分別為X, Y, Z。P點為空間中的一點,用XYZ座標系表示時,其點座標為P(px, py, pz)XYZ。O2為UVW座標系的原點,其三個基準軸的單位向量分別為U, V, W。而O2在XYZ座標系上的點座標為O2(o2x, o2y, o2z)XYZ。我們要在此討論的運算有二:
    • 從O1指向P點的方向,該如何用UVW分量來描述。
    • 如何取得P點在UVW座標系上的點座標。

        首先,我們必須先將向量X用UVW座標系來表示。也就是說,在XYZ座標系時,X向量為(1, 0 ,0)XYZ,而在UVW座標系時,X向量為(xu, xv, xw)UVW,我們必須先計算出這三個分量xu, xv, xw

        在解釋內積運算時,我們提到了當一個向量與一個單位向量做內積運算後,得到的數值是該向量在該單位向量上垂直投影的長度。利用此特性,我們將向量X對單位向量U做內積運算,便得到了X在單位向量U上的垂直投影長度,而這個長度剛好就是X向量在UVW座標系中,對應於U軸的分量。也就是說,xu = X∙U。同理可延伸到V及W軸,得到X向量在UVW座標系中的表示式為:
        X(xu, xv, xw)UVW,其中 xu = X∙U, xv = X∙V, xw = X∙W。

        接著,Y向量與Z向量在UVW座標系的分量也可以利用相同的方式計算出來。

        有了X、Y、Z三向量在UVW座標系上的分量表示式後,我們就可以使用UVW座標系的分量分量來描述從O1指向P點的方向。

        我們知道要求的方向為P(px, py, pz)XYZ,由之前提到的向量縮放及加減法慨念來看時,我們可以得到:
        P(px, py, pz)XYZ= px * X + py * Y + pz * Z
        = px*(xu, xv, xw)UVW+py*(yu, yv, yw)UVW+pz*(zu, zv, zw)UVW
        = (px*xu+py*yu+pz*zu,
            px*xv+py*yv+pz*zv,
            px*xw+py*yw+pz*zw)UVW

        接下來我們來求P點在UVW座標系上的點座標。由幾何的關係來看,我們知道P點在UVW座標系上的點座標是由O2點指向P點的向量。在XYZ座標系中,這個向量為 P - O2 = (px-o2x, py-o2y, pz-o2z)XYZ,而將此向量用UVW座標系表示後,就是我們要求的點座標。因此我們可以得到:
        P(pu, pv, pw)UVW
        = (px-o2x) * X + (py-o2y) * Y + (pz-o2z) * Z
        = (px-o2x) * (xu, xv, xw)UVW +
           (py-o2y)* (yu, yv, yw)UVW +
           (pz-o2z) *(zu, zv, zw)UVW
        其分量的運算結果為:
        pu = (px-o2x)*xu + (py-o2y)*yu + (pz-o2z)*zu
        pv = (px-o2x)*xv + (py-o2y)*yv + (pz-o2z)*zv
        pw = (px-o2x)*xw + (py-o2y)*yw + (pz-o2z)*zw

        以上兩個座標系轉換的例子分別為方向的轉換及位置的轉換,只要能了解其差異性,在實作上應不會有座標系轉換錯誤的問題發生。
    向量的基本運算到此算是介紹完畢。不同於一般常見的矩陣運算,在這邊筆者以幾何及向量的角度來說明這些運算,提供另一種詮釋的方式給各位看倌參考。

沒有留言:

張貼留言