【一道练习题】
面基
时间限制:1000ms 内存限制:65536kb
通过率:107/134 (79.85%)
正确率:107/319 (33.54%)
题目描述
按顺时针或逆时针顺序输入一个简单多边形的每个顶点坐标,求这个多边形的面积。
在几何形状中,简单多边形是由直线,非相交的线段或“边”组成的扁平形状,其成对连接以形成封闭路径。(百度百科)
输入
第一行一个整数nn,表示顶点数
接下来n行,每行22个整数x,yx,y表示一个顶点坐标
输出
对于每组数据,输出一行,一个浮点数表示面积(保留7位小数)
输入样例
3
0 0
100 100
100 0
输出样例
5000.0000000
数据范围
3≤n≤1000003≤n≤100000
0≤x,y≤200
#我的一点思路,不知道对不对:使用向量叉乘计算面积;
for example:S△ABC=0.5*|a×b|;
以下是代码:
#include <stdio.h> #include <stdlib.h>
int main( ){ int i,j,n; double s=0; double a[15][2]; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<2;j++) scanf("%lf",&a[i][j]); for(i=1;i<n;i++) for(j=0;j<2;j++) a[i][j]=a[i][j]-a[0][j]; for(i=1;i<n-1;i++){ s = s + 0.5* ( a[i][0] *a[i+1][1] - a[i+1] [0] * a[i][1] ); } s=s>0?s:-s; printf("%.7lf",s); return 0; }
我的一点疑问:
1.为什么最后s会出现负值呢?增加了一个判断条件判断s是否大于零可以让这道题AC,但我不明白这个正负号反映出来的几何问题。
2.*注意考虑凹多边形。
如果能有人解答,再感谢不过!!