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 }

时间: 2024-10-10 01:52:21

codevs:1249 多边形的面积(多边形面积计算模板)的相关文章

多边形相交面积模板

1 /* 2 类型:多边形相交面积模板 3 */ 4 5 #include<cstdio> 6 #include<iostream> 7 #include<algorithm> 8 #include<cstring> 9 #include<cmath> 10 using namespace std; 11 #define maxn 510 12 const double eps=1E-8; 13 int sig(double d){ 14 ret

计算DXFReader中多边形的面积代码示例

在DXFReader中, 一般的多边形的面积计算绝对值 其中K表是顶点的数目,它们的坐标,用于在求和和, 所以用下面的代码就可以计算出一个封闭的多段线的区域: view source print? 01 Dim Vertex As Object 02 Dim Entity As Object 03 Dim k As Long 04 Dim i As Long 05 Dim Area As Single 06 07 With DXFReader1 08 09  For Each Entity In

多边形的面积

目录 第1章多边形的面积    1 1.1 三角形面积    1 1.2 多边形面积    2 1.3 递推公式    3 1.4 精度评定    4 第2章坡面面积    6 2.1 坡面面积    6 2.2 模型验算    7 第1章多边形的面积 1.1 三角形面积 xy平面内,有三角形123,如下图所示: 图1.1 借助矢量叉积和点积,这个三角形的面积公式非常简单: 这个面积是有符号的:1.2.3逆时针排列,则面积为正:1.2.3顺时针排列,则面积为负.这是对右手系的总结,如果从背面看这

计算任意多边形的面积

对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可.已知三角形顶点坐标,其三角形积可以利用向量的叉乘来计算. 对于凹多边形,如果还是按照上述方法划分成三角形,如下图,多边形的面积 = S_ABC + S_ACD + S_ADE, 这个面积明显超过多边形的面积. 我们根据二维向量叉乘求三角形ABC面积时,利用的是 这样求出来的面积都是正数,但是向量叉乘是有方向的,即 是有正负的,如果把上面第三个公式中的绝对值符号去掉,即 ,那么面积

hdu3060Area2(任意多边形相交面积)

链接 多边形的面积求解是通过选取一个点(通常为原点或者多边形的第一个点)和其它边组成的三角形的有向面积. 对于两个多边形的相交面积就可以通过把多边形分解为三角形,求出三角形的有向面积递加.三角形为凸多边形,因此可以直接用凸多边形相交求面积的模板. 凸多边形相交后的部分肯定还是凸多边形,所以只需要判断哪些点是相交部分上的点,最后求下面积. 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #inc

求任意多边形的面积(转)

原文地址:http://blog.csdn.net/sun_shine_/article/details/18799739 给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做?我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割: 图1 S点作为起始点(点1),a->e依次作为点2,3…….一个三角形的面积是怎样的呢

poj 1265 Area 面积+多边形内点数

Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5861   Accepted: 2612 Description Being well known for its highly innovative products, Merck would definitely be a good target for industrial espionage. To protect its brand-new resear

zoj 1010 (线段相交判断+多边形求面积)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 Area Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Jerry, a middle school student, addicts himself to mathematical research. Maybe the problems he has thought are

利用向量积(叉积)计算三角形的面积和多边形的面积

利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j