首页 > 代码库 > codevs:1249 多边形的面积(多边形面积计算模板)
codevs:1249 多边形的面积(多边形面积计算模板)
题目描述 Description
给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。
多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。
输入描述 Input Description
输入文件第一行给出多边形的顶点数n(n≤100)。接下来的几行每行给出多边形一个顶点的坐标值X和Y(都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值-200≤x,y≤200。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。
输出描述 Output Description
输出文件仅有一行包含一个整数,表示多边形的面积。
样例输入 Sample Input
10
0 0
4 0
4 1
3 1
3 3
2 3
2 2
1 2
1 3
0 3
样例输出 Sample Output
9
Solve:
模板题,求一个非凸多边形的面积
Code:
1 #include <bits/stdc++.h> 2 using namespace std; 3 struct Node 4 { 5 int x , y; 6 Node(int _x = 0 , int _y = 0):x(_x) , y(_y){} 7 8 }; 9 10 int operator ^ (Node a , Node b)11 {12 return a.x * b.y - a.y * b.x;13 }14 Node operator - (Node a , Node b)15 {16 return Node(a.x - b.x , a.y - b.y);17 }18 int n;19 vector<Node> data;20 21 int PolyonArea()22 {23 int ret = 0;24 for(int i = 1 ; i < n - 1 ; ++i)25 ret += (data[i] - data[0]) ^ (data[i + 1] - data[0]);26 return ret;27 }28 int main()29 {30 scanf("%d" , &n);31 for(int i = 1 ; i <= n ; ++i)32 {33 Node a;34 scanf("%d%d" , &a.x , &a.y);35 data.push_back(a);36 }37 int sum = 0;38 sum = PolyonArea() / 2;39 40 printf("%d" , sum);41 }
codevs:1249 多边形的面积(多边形面积计算模板)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。