已知三角形三點座標, 求三角形的面積
先介紹一下三維中的兩點之間距離之式,和二維的幾乎一樣:d = sqrt((x0-x1)^2 + (y0-y1)^2 + (z0-z1)^2)
再介紹叉乘,中心內容!叉乘在定義上有:兩個向量進行叉乘得到的是乙個向量,方向垂直於這兩個向量構成的平面,大小等於這兩個向量組成的平行四邊形的面積。
在直角座標系[o;i,j,k]中,i、j、k分別為x軸、y軸、z軸上向量的單位向量。設p0(0,0,0),p1(x1,y1,z1),p2(x2,y2,z2)。因為是從原點出發,所以向量p0p1可簡記為p1,向量p0p2可簡記為p2。依定義有:
|i j k |
p1×p2 = |x1 y1 z1|
|x2 y2 z2|
展開,得到:
上式 = iy1z2 + jz1x2 + kx1y2 - ky1x2 - jx1z2 - iz1y2
= (y1z2 - y2z1)i + (x2z1 - x1z2)j + (x1y2 - x2y1)k
按規定,有:單位向量的模為1。可得叉積的模為:
|p1×p2| = y1z2 - y2z1 + x2z1 - x1z2 + x1y2 - x2y1
= (y1z2 + x2z1 + x1y2) - (y2z1 + x1z2 + x2y1)
開始正式內容。我們設三角形的三個頂點為a(x0,y0,z0),b(x1,y1,z1),c(x2,y2,z2)。我們將三角形的兩條邊ab和ac看成是向量。然後,我們以a為原點,進行座標平移,得到向量b(x1-x0,y1-y0,z1-z0),向量c(x2-x0,y2-y0,z2-z0)。
①在三維的情況下,直接代入公式,可得向量b和向量c叉乘結果的模為:
|b×c| = ((y1-y0)*(z2-z0) + (z1-z0)*(x2-x0) + (x1-x0)*(y2-y0)) -
((y2-y0)*(z1-z0) + (z2-z0)*(x1-x0) + (x2-x0)*(y1-y0))
| 1 1 1 |
= |x1-x0 y1-y0 z1-z0|
|x2-x0 y2-y0 z2-z0|
它的一半即為所要求的三角形面積s。
還有一種比較簡單的寫法。將向量ab和ac平移至原點後,設向量b為(x1,y1,z1),向量c為(x2,y2,z2),則他們的叉乘所得向量p為(x,y,z),其中:
|y1 z1| |z1 x1| |x1 y1|
x = | | y = | | z = | |
|y2 z2| |z2 x2| |x2 y2|
然後用三維中的兩點之間距離公式,求出(x,y,z)與(0,0,0)的距離,即為向量p的模,它的一半就是所要求的面積了。
以上公式都很好記:x分量由y,z分量組成,y分量由z,x分量組成,z分量由x,y分量組成,恰好是迴圈的。座標平移一下就好了。
②在二維的情況下,我們可以取z = 0這個平面,即令z1 = z2 = 0,且
|p1×p2| = x1y2 - x2y1
|x1 y1|
= | |
|x2 y2|
所以:|b×c| = (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)
|x1-x0 y1-y0|
= | |
|x2-x0 y2-y0|
它的一半即為所要求的三角形的面積s。
注意,用行列式求出來的面積是帶符號的。如果a,b,c是按順時針方向給出,則s為負;按逆時針方向給出,則s為正。
以二維的情況為例,三維亦同:
a(0,0) b(0,1) c(1,0) (a,b,c按順時針方向給出)
s = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
= ((0 - 0)*(0 - 0)-(1 - 0)*(1 - 0))/2
= -0.5
a(1,0) b(0,1) c(0,0) (a,b,c按逆時針方向給出)
s = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
= ((0 - 1)*(0 - 0)-(0 - 1)*(1 - 0))/2
= 0.5
如果你不需要符號的話,再求一下絕對值就好了。這樣也不用去管給出的點的順序了。
以上是利用叉乘。其實還有一招,那就是海**式:
利用兩點之間距離公式,求出三角形的三邊長a,b,c後,令p = (a+b+c)/2。再套入以下公式就可以求出三角形的面積s :
s = sqrt(p*(p-a)*(p-b)*(p-c))
看起來好像比上面的都要簡單…… -.-b 各位看客不要打我!
推薦:在二維的時候使用叉乘公式,三維的時候使用海**式~~~不過如果是需要符號的情況時,就只能使用行列式的計算公式了。
求大三角形中三角形個數
一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...
C 已知三角形三邊,求三角形的面積
area 根號 s s a s b s c s a b c 2 三角形三邊長度由cin輸入,需判斷三邊是否構成乙個三角形,若是,則計算其面積並輸出,否則輸出錯誤資訊。程式須有兩個函式,乙個函式用來判斷,另乙個函式用來計算三角形的面積 段 include include using namespace...
經典演算法 (三)帕斯卡三角形(楊輝三角形)
楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...