已知多边形的各点坐标,求多边形的面积
程序员文章站
2022-03-30 13:05:37
...
输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3 <= n <= 100),它表示可以的边数(当然也是顶点数),然后是按照逆时针顺序指定的n个顶端的坐标(x1,y1,x2,y2 … xn,yn),为了简化问题,这里的所有坐标都用整数表示。输入数据中所有的整数都在32位整数范围内,n = 0表示数据的结束,不做处理。对于每个测试实例,请输出对应的多个面积,结果精确到小数点后一个小数。每个实例的输出占一行。
#include<stdio.h>
int main()
{
int a[100],b[100],n,i;
double s=0;
while(scanf("%d",&n)!=EOF&&n!=0)
{
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);//把所有顶点的横坐标放在一个数组里,纵坐标放在一个数组里
a[n+1]=a[1];//最后一个顶点的纵坐标乘于第一个顶点的横坐标,所以把第一个顶点存放在数组的最后
b[n+1]=b[1];//横坐标同上
}
for(i=1;i<=n;i++)
s=s+(a[i]*b[i+1]-b[i]*a[i+1]);//求多边形面积用第一个顶点的横坐标乘于下一个顶点的纵坐标直到最后一个横坐标,然后把所有的值相加;纵坐标同上,第一个顶点的纵坐标乘于下一个顶点的横坐标直到最后一个;最后用横坐标求得的和减去纵坐标求得的和
printf("%0.1lf\n",s/2);//上述结果除以2即为多边形面积,注意顶点一定是逆时针顺序
s=0;
}
return 0;
}
上一篇: Lua学习笔记整理
下一篇: 用List实现登陆注册功能