給出三點的座標,求三角形面積(法一:海倫公式,法二:向量法(。。。還沒搞懂))

三角形面積

時間限制: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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章