题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036
题目要求:
求多边形面积
思路:
分割
如图,对所有相邻坐标点与原点构成的三角形进行矢量求和即是面积;
由平行四边形的面积计算公式可得单个三角形的面积公式:(x1y2-y1x2)/2;
此题的坐标为逆时针顺序,不必取反。
代码:
#include <stdio.h>
int main()
{
int n, i;
while (scanf("%d", &n) != EOF)
{
if (n == 0) {}
else
{
int x[100], y[100];
double ans = 0;
for (i = 1; i <= n; i++)
{
scanf("%d", &x[i]);
scanf("%d", &y[i]);
}
x[n + 1] = x[1];
y[n + 1] = y[1]; //最后一点与第一点相连
for (i = 1; i <= n; i++)
{
ans += (x[i] * y[i + 1] - y[i] * x[i + 1]) / 2.0; //面积公式
}
printf("%.1f\n", ans);
}
}
}