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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
View Code

 

以上是关于codevs:1249 多边形的面积(多边形面积计算模板)的主要内容,如果未能解决你的问题,请参考以下文章

多边形面积公式

多边形的面积怎么求?

EOJ 1127. 多边形面积(计算几何)

多边形的面积

多边形面积

python如何实现计算多边形面积