前往
大廳
主題

07. PGA2D,點與線的表示法

Lumi | 2023-12-05 20:56:16 | 巴幣 0 | 人氣 60

幾何代數系列文之七。觀看本文需要讓巴哈姆特能顯示數學式子

在Euclidean Geometric Algebra(EGA)中,雖然向量和平面是基本元素,但是需用向量來表示,需用方程式或起點加方向等方式來表示。PGA解讀幾何元素的方式與EGA不同,點與線成為基本元素,可以直接拿來做四則運算,或是做內積與外積運算。除此之外,PGA有許多優於EGA的地方。例如幾何元素可離開原點,旋轉與平移運算被整合在一起等等。

PGA的發明相當晚,其概念可以追溯到2000年的這篇論文,之後得等到2017年才有人替此概念取名為Projective Geometric Algebra。經過幾年推廣,現在改稱作Plane-based Geometric Algebra,而原來的名稱又被用於另一個概念。

本文會介紹如何表示點、線、消失點與消失線,和一些基本運算的幾何意義。但是在那之前,我們需要幾種特別的數字。


Geometric Numbers

我們需要的數都不是實數,而這些數隱藏在下面這條方程式裡:
$$
x^2+1=0
$$
相信讀者能馬上找到其中一個平方為-1的數,我們先把它記作$\mathbf{e}_{-}^2=-1$。若使用幾何代數計算相對論會需要這個$\mathbf{e}_{-}$,但PGA不會用到它。

第二個數其實從第一篇開始就不斷出現,只是之前都把這個數解讀成單位向量,當作基底來使用。它不是實數1,但它的平方為1。我們把此數寫成$\mathbf{e}_{+}^2=1$,PGA也會繼續用它。

看到這裡讀者應該已經發現,這條方程式裡的數字都可以視為非實數的平方。第三個數平方為$0$,PGA的平移運算需要這個數。
$$
\mathbf{e}_{-}^{2}+\mathbf{e}_{+}^{2}=\mathbf{e}_{0}^{2}
$$
以往用符號來表示二維空間會用$\mathbb{R}^2$,若用幾何代數的方式來表示,PGA2D會表示為$\mathbb{R}_{2,0,1}$。下標的數字代表geometric number的數量,意思是使用2個平方為1的數,0個平方為-1的數,1個平方為0的數。早期的PGA文章會表示成$\mathbb{R}_{2,0,1}^*$,這是由於下節提到的解讀方式,但是後來社群決定去掉星號。

Geometric number之間的乘法有反交換律,即左右交換會使正負相反。可以將它們當成彼此垂直的基底向量,彼此內積為0,然後用幾何積和外積的定義來解釋它們的乘法反交換律。

接下來介紹如何將這些數解讀為幾何元素。

線的表示法

在EGA中,任意維度中的1-blade都解釋為向量,2-blade都視為平面。但是PGA會隨著維度不同,對blade有不同解釋。最基本的1-blade在PGA2D中被視為,在PGA3D中則視為平面。這麼做使所有幾何元素都得到homogeneous性質,意思是非零實數乘以一個幾何元素,產生的結果仍然代表原本的元素。熟悉圖學的讀者對此性質應不陌生,因為這個性質和齊次座標中的點一樣。

設一個單位向量$\mathbf{n}$,PGA2D會將之解釋為法向量為$\mathbf{n}$的線。若這條線與原點的距離為$\delta$(希臘字母小寫的delta),則線可表示為:
$$
L=\mathbf{n}-\delta e_{0}
$$
若法向量$\mathbf{n}$的長度不為$1$,線要經過正規化才能從$-e_0$的係數取得正確的距離資訊,正規化的方法是將線$L$除以法向量$\mathbf{n}$的長度。

$-e_0$解讀為消失線,即位於無窮遠的線。不管往哪個方向走無窮遠的距離,都會到達到這條線。由幾何積的定義可以推導出$e_0\cdot e_0=0$,意味著消失線與自身成正交。又因$e_0$與其他基底向量的內積為0,意即消失線與所有方向的線都成正交。

納悶為什麼$e_0$前面要加一個負號嗎?複習一下高中時學的線方程式:
$$
a \mathbf{x}+b \mathbf{y} - c =0
$$
$(a,\ b)$是線的法向量,$c$是與原點的距離,兩者分別對應$\mathbf{n}$與$\delta$。

點的表示法

在EGA中,2-blade為平面,寫成兩個向量的外積。PGA2D中,2-blade被解釋為,可寫成兩條線的外積,此時外積就如同相交的運算。設兩條彼此正交且正規化的線$L_1$與$L_2$,交點為$X$且位於$(x_1,\ x_2)$處,則點可表示為(注意基底順序):
$$
\begin{aligned}
X &= L_{1}\wedge L_{2}\\
&= x_1 \mathbf{e}_{20} + x_2 \mathbf{e}_{01} + \mathbf{e}_{12}
\end{aligned}
$$
若$L_1$與$L_2$沒正規化或彼此沒正交,點需經過正規化才能直接從係數讀出點的位置,方法是點$X$除以$\mathbf{e}_{12}$的係數,因此可用$\mathbf{e}_{12}$的係數是否為$1$來辨別是否為正規化的點。

若兩線彼此平行,或是其中一條線是消失線,則兩線的交點會位於無窮遠處的消失線上,稱作消失點。此時$\mathbf{e}_{12}$係數為$0$,$(x_1,\ x_2)$代表的不是消失點的位置,而是消失點所在的方向。舉例來說,可藉由求消失線與線$L$的交點而得到線$L$的方向:
$$
\begin{aligned}
D_L &=-\mathbf{e}_{0}\wedge L\\
&= - \mathbf{e}_{0}L
\end{aligned}
$$
大部分情況中外積可視為交集運算,不過考慮到外積的性質,和真正的交集還是不太一樣。因為若兩幾何元素重合,用外積計算會得到$0$,而不是得到重合的元素。

加減運算

以往方向和點都用向量處理,現在PGA用消失點代表方向,分開方向和點的概念。點加上消失點會移動點的位置,兩點相加會得到兩點間中央的點,兩點相減會得到消失點,如下圖:


線的加減運算和點的性質有些類似,尤其是兩線平行的時候。

兩線相加所產生的線會通過兩線交點,且平分兩線之間的空間。兩線平行時產生的線剛好就在兩線中央,此時交點為消失點。

兩線相減產生的線也會通過兩線交點,且與兩線相加的結果呈正交。見下圖,兩線越是接近平行,兩線交點越接近無窮遠,兩線相減產生的線也越遠,兩線平行時相減會產生消失線。

乘除運算

兩點相乘或兩線相乘會產生motor,可用來移動或旋轉幾何元素。回想第二篇提到旋轉是由偶數次鏡射運算組成,因此我們先來看PGA如何做鏡射。

相較於EGA,PGA解讀此類算式變得更直接。若要將幾何元素$A$對點$X$做鏡射,可寫成$XAX^{-1}$,例如下圖,將線$L$和點$X_1$對著$X_2$鏡射:

將幾何物體對著線鏡射也可如法炮製。若用PGA的觀點來解讀傳統的鏡射公式,可看成將幾何元素對通過原點的線做鏡射。

對兩條線做鏡射會變成繞著兩線交點旋轉,不需要繞著原點才能旋轉。若兩條線平行,兩次鏡射等同於平移,此時也可把平移看成是繞著消失點旋轉。見下圖,設$T$為三角形任一頂點:

兩條線彼此平行時,幾何元素平移的距離會是兩線距離的兩倍。若兩線不平行,幾何元素旋轉的角度會是兩線夾角的兩倍。

同理,對兩個點鏡射會是平移,移動距離是兩點間距離的兩倍。

其他常用計算

若要計算兩線之間的角度$\theta$,可使用內積:
$$
L_{1}\cdot L_{2}=\lVert L_{1}\rVert \lVert L_{2} \rVert\cos \theta
$$
若已知點$X$與線$L$,想求通過點$X$且垂直於$L$的線,也可使用內積,結果為$L\cdot X$。若想將點$X$投影到線$L$上,可以利用第三篇提到的投影公式,此公式也可以讓線投影到點上,如下圖:

幾何代數有一個與外積$\wedge$成對的乘法,稱作regressive product,符號為$\vee$。此運算會用到外積與對偶,和第三篇的正交補餘概念類似,但計算方式不同,礙於篇幅暫且不多做說明。

相對於外積用來求兩線交點,regressive product可用來求通過兩點$X_{1}$與$X_{2}$的線$L$,寫作$L=X_{1}\vee X_{2}$。若想求點到線的距離也可用這個乘法,公式為$X \vee L$。

結語

需要上述性質證明的讀者可上bivector.net下載PGA教學文件,讀者需熟悉第三篇提到的數學性質才能看懂,不過只靠本系列文不足以了解整篇教學文件。PGA的公式雖然看起來簡單,但學習無法一步登天,就如同學習線性代數時不會只讀幾篇文章。

本篇所介紹的許多公式或概念能直接套用在3D的情況下,但有仍有一部分不行。例如PGA2D中兩條不重合的線會有交點,在3D中卻不一定。續篇PGA3D會介紹此類異同。

創作回應

相關創作

更多創作