三角形面積的求解方法(由點或邊求解)

2021-07-04 05:00:10 字數 1751 閱讀 8879

我們設三角形的三個頂點為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 各位看客不要打我!

推薦:在二維的時候使用叉乘公式,三維的時候使用海**式~~~不過如果是需要符號的情況時,就只能使用行列式的計算公式了。

C 已知三角形三邊,求三角形的面積

area 根號 s s a s b s c s a b c 2 三角形三邊長度由cin輸入,需判斷三邊是否構成乙個三角形,若是,則計算其面積並輸出,否則輸出錯誤資訊。程式須有兩個函式,乙個函式用來判斷,另乙個函式用來計算三角形的面積 段 include include using namespace...

JSP求三角形面積

2 實驗1 60分鐘 2.1 實驗目的 計算三角形的面積 2.2 實驗任務 1 定義乙個可以輸入三角形三條邊的 html頁面 2 定義乙個可以計算三角形面積的 jsp頁面 3 顯示三角形的面積 2.3 實驗要求 1 三角形的邊必須為數字,如果三條邊沒有賦初值,則三條邊賦初值為零 2 判斷三角形的三條...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...