三角形
三角形在建模和图形学中有着极其重要的位置。复杂3D物体的表面,如车或人体,都是用三角形模拟的,像这样一组相连的三角形称作三角网格。
基本性质
三角形是通过列出它的三个顶点来定义的。这些点的顺序是非常重要的,在左手坐标系中,当从三角形"正面"看时,经常以顺时针方向列出这些点,设这三个顶点为v1、v2、v3。三角形位于一个平面中,这个平面的方程(法向量n和到原点的距离d)在很多应用中非常重要。
让我们标出图12.16中的三角形内角、顺时针边向量、边长。
设Li为ei的长度,注意ei、Li和vi的对应关系,vi为相应下标的顶点,它们的关系如下:
面积
最经典的计算方法是用底和高计算面积,观察图12.17中的平行四边形及其包含的三角形。
由经典几何可知,平行四边形面积等于底和高的乘积。因为三角形恰好占了这个面积的一半,所以由底和高给出的三角形面积公式为(公式12.18):
A = bh/2
公式12.18 三角形面积是平行四边形面积的一半
如果不知道高,可以使用海伦公式计算面积,它只需要提供三边的长度即可。设s为周长的一半(也称作半周长),如公式12.19所示:
海伦公式非常有用,因为它在3D中使用非常方便。
有时候,高和周长都没有直接提供,所知道的只有顶点的笛卡尔坐标。(当然,总是可以从坐标中算出边长,但在某些情况下,我们想要避免这种代价相对较高的计算。)让我们看看能否从顶点坐标直接计算面积。
先在2D中解决这个问题。基本思想是,对三角形三边中的每一边,计算上由该边,下由x轴所围成的梯形的有符号面积(如图12.18 所示)。
"有符号面积"是指:如果边的端点是从左向右的,则面积为正;如果边的端点是从右向左的,则面积为负。注意不管三角形的方向如何变化,都存在至少一个正边和一个负,一个竖直边的面积为0。各边下面区域的面积分别为:
即使一部分(或整个)三角形扩展到了x轴下边,上面的公式依然正确。
这三个梯形的有符号面积相加,就得到了三角形本身的面积。事实上,能用同样的思想计算任意多边形的面积。
这里,假设顶点是按顺指针列出的,如果顶点以相反的顺序列出,面积的符号将变负。将这三个梯形的面积相加,计算三角形的有符号面积:
实际上,还能进一步简化。基本思想是,平移三角形不会改变三角形的面积。因此,我们可以在竖直方向上平移三角形,从每个y坐标中减去y3,如公式12.20所示。(用代数变换也能得到这个简化形式。)
在3D中,可以通过叉乘来计算三角形的面积。两向量a、b叉乘的大小等于以a、b为两边的平行四边形的面积。因为三角形面积等于包围它的平行四边形的一半,所以我们有了一种简便方法。给出三角形的两个边向量,e1和e2,则三角形面积为:
A = || e1 x e2 || / 2