三角形面積
時間限制:3000 ms | 內存限制:65535 KB
難度:2
描述
給你三個點,表示一個三角形的三個頂點,現你的任務是求出該三角形的面積
輸入
每行是一組測試數據,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。(座標值都在0到10000之間)
輸入0 0 0 0 0 0表示輸入結束
測試數據不超過10000組
輸出
輸出這三個點所代表的三角形的面積,結果精確到小數點後1位(即使是整數也要輸出一位小數位)
樣例輸入
0 0 1 1 1 3
0 1 1 0 0 0
0 0 0 0 0 0
樣例輸出
1.0
0.5
這是個簡單的數學幾何題,我的做法是求出三條邊的長度,然後用
海倫公式,求出面積,這個可能麻煩一點,但是比較穩當,大家都會
另外一種好方法,就是向量積的知識了:以兩個相交向量爲臨邊的
平行四邊形的面積是這兩個向量的向量積的模,也就是等於他們模的乘積乘上
他們夾角的正弦值。
代碼:
海倫公式:
假設在平面內,有一個三角形,邊長分別爲a、b、c,三角形的面積S可由以下公式求得:
S=√[p(p-a)(p-b)(p-c)]
而公式裏的p爲半周長:
p=(a+b+c)/2
#include <stdio.h>
#include <math.h>
int main()
{
double x1,y1,x2,y2,x3,y3,a,b,c,s,p;
while(~scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)&&(x1||x2||x3||y1||y2||y3))
{
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.1lf\n",s);
}
return 0;
}
代碼;
#include <stdio.h>
int main()
{
double x1,y1,x2,y2,x3,y3,s;
while(~scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3)&&(x1||x2||x3||y1||y2||y3))
{
s=(x1*y2+y1*x3+x2*y3)-(x1*y3+y2*x3+y1*x2);
if(s<0)
s=-s;
printf("%.1lf\n",s/2);
}
return 0;
}