码迷,mamicode.com
首页 > 其他好文 > 详细

codevs:1249 多边形的面积(多边形面积计算模板)

时间:2017-05-18 23:07:16      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:node   题目   print   ret   包含   垂直   namespace   strong   struct   

题目描述 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 }
View Code

 

codevs:1249 多边形的面积(多边形面积计算模板)

标签:node   题目   print   ret   包含   垂直   namespace   strong   struct   

原文地址:http://www.cnblogs.com/jianglingxin/p/6875934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!