欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

给出三点的坐标,求三角形面积(法一:海伦公式,法二:向量法(。。。还没搞懂))

程序员文章站 2022-04-04 08:05:11
...

三角形面积

时间限制: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;
}