三角形
三角形在建模和圖形學(xué)中有著極其重要的位置。復(fù)雜3D物體的表面,如車或人體,都是用三角形模擬的,像這樣一組相連的三角形稱作三角網(wǎng)格。
基本性質(zhì)
三角形是通過(guò)列出它的三個(gè)頂點(diǎn)來(lái)定義的。這些點(diǎn)的順序是非常重要的,在左手坐標(biāo)系中,當(dāng)從三角形"正面"看時(shí),經(jīng)常以順時(shí)針?lè)较蛄谐鲞@些點(diǎn),設(shè)這三個(gè)頂點(diǎn)為v1、v2、v3。三角形位于一個(gè)平面中,這個(gè)平面的方程(法向量n和到原點(diǎn)的距離d)在很多應(yīng)用中非常重要。
讓我們標(biāo)出圖12.16中的三角形內(nèi)角、順時(shí)針邊向量、邊長(zhǎng)。

設(shè)Li為ei的長(zhǎng)度,注意ei、Li和vi的對(duì)應(yīng)關(guān)系,vi為相應(yīng)下標(biāo)的頂點(diǎn),它們的關(guān)系如下:


面積
最經(jīng)典的計(jì)算方法是用底和高計(jì)算面積,觀察圖12.17中的平行四邊形及其包含的三角形。

由經(jīng)典幾何可知,平行四邊形面積等于底和高的乘積。因?yàn)槿切吻『谜剂诉@個(gè)面積的一半,所以由底和高給出的三角形面積公式為(公式12.18):
A = bh/2
公式12.18
三角形面積是平行四邊形面積的一半
如果不知道高,可以使用海倫公式計(jì)算面積,它只需要提供三邊的長(zhǎng)度即可。設(shè)s為周長(zhǎng)的一半(也稱作半周長(zhǎng)),如公式12.19所示:

海倫公式非常有用,因?yàn)樗?D中使用非常方便。
有時(shí)候,高和周長(zhǎng)都沒(méi)有直接提供,所知道的只有頂點(diǎn)的笛卡爾坐標(biāo)。(當(dāng)然,總是可以從坐標(biāo)中算出邊長(zhǎng),但在某些情況下,我們想要避免這種代價(jià)相對(duì)較高的計(jì)算。)讓我們看看能否從頂點(diǎn)坐標(biāo)直接計(jì)算面積。
先在2D中解決這個(gè)問(wèn)題。基本思想是,對(duì)三角形三邊中的每一邊,計(jì)算上由該邊,下由x軸所圍成的梯形的有符號(hào)面積(如圖12.18
所示)。

"有符號(hào)面積"是指:如果邊的端點(diǎn)是從左向右的,則面積為正;如果邊的端點(diǎn)是從右向左的,則面積為負(fù)。注意不管三角形的方向如何變化,都存在至少一個(gè)正邊和一個(gè)負(fù),一個(gè)豎直邊的面積為0。各邊下面區(qū)域的面積分別為:

即使一部分(或整個(gè))三角形擴(kuò)展到了x軸下邊,上面的公式依然正確。
這三個(gè)梯形的有符號(hào)面積相加,就得到了三角形本身的面積。事實(shí)上,能用同樣的思想計(jì)算任意多邊形的面積。
這里,假設(shè)頂點(diǎn)是按順指針列出的,如果頂點(diǎn)以相反的順序列出,面積的符號(hào)將變負(fù)。將這三個(gè)梯形的面積相加,計(jì)算三角形的有符號(hào)面積:

實(shí)際上,還能進(jìn)一步簡(jiǎn)化。基本思想是,平移三角形不會(huì)改變?nèi)切蔚拿娣e。因此,我們可以在豎直方向上平移三角形,從每個(gè)y坐標(biāo)中減去y3,如公式12.20所示。(用代數(shù)變換也能得到這個(gè)簡(jiǎn)化形式。)

在3D中,可以通過(guò)叉乘來(lái)計(jì)算三角形的面積。兩向量a、b叉乘的大小等于以a、b為兩邊的平行四邊形的面積。因?yàn)槿切蚊娣e等于包圍它的平行四邊形的一半,所以我們有了一種簡(jiǎn)便方法。給出三角形的兩個(gè)邊向量,e1和e2,則三角形面積為:
A = || e1 x e2 || / 2