题目描述
按顺时针或逆时针顺序输入一个简单多边形的每个顶点坐标, 求这个多边形的面积.
在几何形状中, 简单多边形是由直线, 非相交的线段或 "边" 组成的扁平形状, 其成对连接以形成封闭路径.(百度百科)
输入
第一行一个整数 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;
- }
我的一点疑问: 为什么最后 s 会出现负值呢? 虽然说我增加了一个判断条件判断 s 是否大于零可以让这道题 AC, 但是这个正负号反映出来的几何问题我真的不是很明白......
如果能有人解答, 再感谢不过!!
来源: http://www.bubuko.com/infodetail-3301715.html