您的位置:首页 > 编程语言 > C语言/C++

任意多边形的求解c语言

2016-11-05 01:20 232 查看
杭电2037题

#include <stdio.h>
int main(void)
{
int n,i;//n个坐标
double sum;//面积
int site[150][2];//每个坐标
while(scanf("%d",&n)!=EOF)//获得输入
{
if(n==0)
break;//0时跳出
for(i=0;i<n;i++)
scanf("%d %d",&site[i][1],&site[i][2]);//获得坐标输入
for(i=1,sum=0;i<n;i++)
sum+=(site[i-1][1]*site[i][2]-site[i-1][2]*site[i][1])*0.5;
sum+=(site[n-1][1]*site[0][2]-site[n-1][2]*site[0][1])*0.5;//面积计算
printf("%.1f\n",sum);//输出面积
}
return 0;
}
由这道可以得出经验:
1、任意多边形都可以用向量叉乘来得出,向量叉乘是有正负的,坐标向量叉乘公式:

(x1,y1)*(x2,y2)=x1*y2—x2*y1;



而关于向量相乘的正负,如上图P>A>B是一个顺时针的走向,则其叉乘势负值,若是逆时针,则是正值;

2、重要的一点,在程序的实现时所有的点都必须是逆时针输入运算的,不然算出的答案会是错的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息