HDU 2036(多边形计算面积模板)

http://acm.hdu.edu.cn/showproblem.php?pid=2036

这是第一次求多边形面积,看了ppt自己写了这个模板代码

这题涉及几个知识点:1,矢量叉乘,表示一个垂直于两个矢量的矢量,有方向,假设叉乘的两个矢量为a,b,a逆时针可以走到b,那么,a×b为正,反之为负

2,叉乘过程:a(x1,y1),b(x2,y2),那么a×b=x1*y2-x2*y1;可以列出矩阵来求相乘结果。

3,多边形可以化成几个三角形,然后逐一用矢量相乘取绝对值在平分为二得到结果,这是以多边形某一点来做的,而又可以在多边形内取一个点为扇点,连接每个顶点,

然后计算每个三角形的面积再相加,而又,这个扇点可以放到多边形外面来,连接每个点,再逆时针逐一计算面积取半,因为这是有向的,所以可以直接相加

而又,这个扇点既然可以放到多边形外面来,不然将之放在原点,这样便于计算。

#include<stdio.h>
int t,i;
double x[110],y[110];
double area(int n)
{
       return (x[n]*y[(n+1)%t])-(x[(n+1)%t]*y[n]);//这里的取模是因为当达到最后一个的时候,就应该拿最后一个向量跟第一个向量进行叉乘
                                                  //这里是把扇点放在原点的位置,每个向量在计算的时候都少了(x-0,y-0)这个过程,简便 
}
int main()
{
    double s;
    while(scanf("%d",&t),t)
    {
       s=0;
       for(i=0;i<t;i++)
       {
          scanf("%lf%lf",&x[i],&y[i]);
          if(i)s+=area(i-1);//当有两个向量的时候就可以开始计算了,节省一点时间 
       }
       s+=area(i-1);
       printf("%.1lf
",s/2.0);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/huzhenbo113/p/3268098.html