HDU2036 计算多边形的面积

计算多边形面积就是通过拆分三角形的方法,即为选取任意一个点,从该点出发,连接多边形的每一个顶点,这样就将多边形分为了许多个三角形。计算每一个三角形的面积即可,用叉积计算的每一个三角形的面积为"有向面积",直接将所有三角形的有向面积相加,结果的绝对值就是多边形的面积。

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<cmath>
const double EPS = 1e-8;
const int N = 301;
using namespace std;
struct Point{
    Point(double l = 0, double r = 0) :x(l), y(r){};
    double x, y;
};
Point operator-(Point a, Point b){
    return Point(a.x - b.x, a.y - b.y);
}
double Cross(Point p0, Point p1, Point p2){
    Point a = p1 - p0;
    Point b = p2 - p0;
    return a.x*b.y - b.x*a.y;
}
int n;
Point P[N];
double ans;
int main(){
    int i;
    Point P0;
    while (scanf("%d", &n) && n){
        ans = 0;
        for (i = 0; i < n; i++)
            scanf("%lf%lf", &P[i].x, &P[i].y);
        P[n++] = P[0];
        for (i = 0; i < n - 1; i++){
            ans += Cross(P0, P[i], P[i + 1]);
        }
        ans = abs(ans / 2);
        printf("%.1lf\n", ans);
    }
    return 0;
}
时间: 2024-10-29 19:12:16

HDU2036 计算多边形的面积的相关文章

【改革春风吹满地 HDU - 2036 】【计算几何-----利用叉积计算多边形的面积】

利用叉积计算多边形的面积 我们都知道计算三角形的面积时可以用两个邻边对应向量积(叉积)的绝对值的一半表示,那么同样,对于多边形,我们可以以多边形上的一个点为源点,作过该点并且过多边形其他点中的某一个的多条射线,这样就可以把该多边形变为多个三角形,然后利用叉积求面积即可. 不过要注意,对于三角形可以简单的用叉积的绝对值的一半表示,但对于多边形不可随意将它分割成的几个三角形对应的叉积的绝对值相加,要有一定顺序才可. 对于三角形,有 [该图片来源:https://www.cnblogs.com/xie

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

题目描述 Description 给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的.要求计算多边形的面积. 多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一.然后按逆时针方向给出各顶点的坐标值.所有的坐标值都是整数(因此多边形的面积也为整数). 输入描述 Input Description 输入文件第一行给出多边形的顶点数n(n≤100).接下来的几行每行给出多边形一个顶点的坐标值X和Y(都为整数并且用空格隔开).顶点按逆时针方向逐个给出.并且多边形的每一

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

计算任意多边形的面积

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

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

向量的数量积和向量积: (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+(axby-aybx)k,为了帮助记忆,利用三阶行

多边形的面积

目录 第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顺时针排列,则面积为负.这是对右手系的总结,如果从背面看这

hdu 1115(计算多边形重心)

题意:已知一多边形没有边相交,质量分布均匀.顺序给出多边形的顶点坐标,求其重心. 分析: 求多边形重心的题目大致有这么几种: 1,质量集中在顶点上.n个顶点坐标为(xi,yi),质量为mi,则重心 X = ∑( xi×mi ) / ∑mi Y = ∑( yi×mi ) / ∑mi 特殊地,若每个点的质量相同,则 X = ∑xi / n Y = ∑yi / n 2,质量分布均匀.这个题就是这一类型,算法和上面的不同. 特殊地,质量均匀的三角形重心: X = ( x0 + x1 + x2 ) / 3

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

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