求任意多边形面积-有向面积

c++如何求任意多边形的面积 由于项目需要,求解任意不规则多边形的面积 ,想了很久,也不知道怎么叙述,直接代码展示吧#include <iostream> #include <vector> using namespace std; struct Point//////定义坐标结构体 { float x, y; }; float intAreaCalc(vector<Point> &ptVector)/// 阅读详情

给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做?
我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割:

图1

S点作为起始点(点1),a->e依次作为点2,3……。
一个三角形的面积是怎样的呢?
根据线性代数的知识,我们有如下的三角形面积公式,称之为有向面积(signed area):

将这个行列式以第三列展开可以得到:

这就是以点1、2、3构成的三角形的有向面积(点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正),那么继续我们的工作,通过三角形的面积公式,来得到多边形的面积公式:
对于图1而言,多边形的面积就是:
S(1->6)=S(1,2,3)+S(1,3,4)+S(1,4,5)+S(1,5,6)
这里我们不免有些疑问,第一,图1所给出的是凸多边形,那这种算法对于非凸多边形是否同样适用呢?比如下面这个最简单的凸多边形的图形:

图2

用刚才的划分方法的话,就会出现一个诡异的问题,那就是有一个三角形出现在了图形的外面,而另外一个又超出了多边形的范围(划分为了Sab,Sbc两个图形),那么这样再用刚才的公式求面积,结果还是正确的么?
S(1->4)=S(1,2,3)+S(1,3,4)
先公布结论,这个式子是正确的,等等,为什么?还记得刚才我提到了那个“有向面积”的概念么?忘了的话,请回头看看加重了的字。
请注意从图中看,Sab点为顺时针排列,Sbc点为逆时针排列,面积从数值上就是从Sab这个超过范围的大三角形中去掉Sbc这个小三角形,最后的结果神奇的就是多边形Sabc的面积,那么这个结论能否推广到任意多边形呢?

图3

在这里不做证明,下面给出的公式,就是任意多边形的面积公式:

题目:hdu2036     http://acm.hdu.edu.cn/showproblem.php?pid=2036


代码:

#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<queue>
#include<iomanip>
using namespace std;
struct P{
    int x;
    int y;
};
P p[105];
double area(int a)
{
    int b = a-1;
    return (p[b].x*p[a].y-p[a].x*p[b].y)-(p[0].x*p[a].y-p[a].x*p[0].y)+(p[0].x*p[b].y-p[b].x*p[0].y);
}
int main()
{
    int n;
    while(cin >> n){
        if(n==0) break;
        for(int i=0;i<n;i++)
            cin >> p[i].x >> p[i].y;
        double sum = 0;
        for(int i=2;i<n;i++){
            sum += 1.0/2.0*area(i);
        }
        cout << fixed << setprecision(1) << sum << endl;
    }
    return 0;
}

求任意多边形的面积 Input 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3 输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。 Output 对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。 每个实例的输出占一行。 Sample Input 3 0 0 1 0 0 1 4 1 0 0 1 -1 0 0 -1 0 阅读详情

相关推荐

2021-03-08 使用SPDK部署NVMe over TCP

NVMe-oF Target入门指南 SPDK NVMe over Fabrics Target是一个用户空间应用程序,通过以太网,Infiniband或光纤通道等结构呈现块设备,SPDK目前支持RDMA和TCP传输。 本文将在已经编译好SPDK的基础上演示如何使用SPDK搭建NVMe over TCP,前提是您已经将一块NVMe硬盘挂载到linux系统中。 如果您想获取有关SPDK更详细的信息,请参考 官方文档。 演示过程的Host主机的ip地址是192.168.0.21,Target主机的ip地址是19

Pancras的博客 2843

多边形面积计算

> 手写地理信息组件系列 **第7篇** > **多边形实体的面积计算** > 难度指数:★★★☆☆ “这个世界会好吗?” 第一次听到这一句,是在一个某已"行为不端"的民谣歌手的作品里听到的。究起源头,是出自于“中国最后一位大儒家”梁漱溟的父亲,梁济之口。 梁济所处清末,朝野无能,江河日下。梁济半生为国奔走呼号,奈何仍国之不国。一天,梁济将自己25岁的儿子梁漱溟叫到身边,问了儿...

GISVertex 6167

Mongodb操作与Java(四)MongoTemplate的使用

MongoTemplate的使用

A乐神的博客 3437

三角形的有向面积

有向面积的概念 既有大小又有方向的面积 平面三角形的有向面积 平面直角坐标系中作任意△ABC,其中A(x1,y1),B(x2,y2),C(x3,y3)。若A、B、C是呈顺时针方向排列,有向面积为负;若A、B、C是呈逆时针方向排列,有向面积为正;若A、B、C三点共线,有向面积为0。有向面积的计算公式为 应用 判断点D否在△ABC内部 l方法一(方向法):连接DA、DB、DC,若△D...

WINGREZ‘S BLOG 6198

手把手推导APM的 sqrt_controller控制器

前言 玩过无人机的朋友对APM应该都不会陌生,如果是搞过多旋翼飞控且读过代码,肯定遇到过sqrt_controller控制器,它频繁的在位置、姿态控制中出现,所以非常有必要搞清楚这个控制原理。 下面以高度控制器为例来分析。 高度控制 APM的高度控制采用PID串级3环控制,即外环位置控制,中间速度控制,内环速度控制,如下图所示。 今天要讨论的sqrt_controller就是应用于位置控制器中。位置控制器的输出是速度控制器的参考reference输入,如果采用单P控制,其输出vel_ref = pos_e

周小逗的博客 3027

鸿蒙5.0进阶开发:UI开发-不依赖UI组件的全局自定义弹出框 (openCustomDialog)(推荐)

本文介绍通过入参形式为ComponentContent创建自定义弹出框............

AyomQAQ的博客 1850

任意多边形面积—有向面积

给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做? 我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割: 图1 (点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正) 对于图1而言,多边形的...

此博客已废弃 1万+

CD-HIT的使用

继续我的生信笔记系列。从某网站的附带文献中读到该工具,搜索了一下,发现网上的大佬们都在讲如何用它去冗余,相对官方页面的介绍而言很是片面,于是刚好有聚类的需求的我准备对其全体功能做做实验,学习一下由李伟忠博士在伯纳姆研究所(现为桑福德伯纳姆医学研究所)亚当·戈兹克博士的实验室开发的牛工具。 首先是官方介绍: CD-HIT是一个非常广泛使用的程序,用于蛋白质或核苷酸序列的聚类和比较。最初由李伟忠博士在伯纳姆研究所(现为桑福德伯纳姆医学研究所)亚当·戈兹克博士的实验室开发,CD-HIT速度非常快,可以处理非常

一名学术waste的note pro 1万+

行列式 & 有向面积

行列式通常来讲是一个数。而且这个数和面积(或者体积有关)。 例如,向量a和b的行列式: 可以由a和b所张成的平行四边形的面积表示,如下表示: “有向”表示了两个向量之间的夹角。比如,如果我们设置行列式如下: 可用下图表示: 那么该行列式的值应该为多少呢?答案是:-1(0*0-1*1). a和b的夹角应该是90度才对,为什么会是负面积呢? 答案在于a和b的给出顺序。 ...

李歇特冯-兹拜因巴哈的博客 3240

【汽车主动降噪】【ANC算法优化】基于深度学习的汽车主动噪声控制技术研究及Matlab实现

本文探讨了基于深度学习的汽车主动降噪(ANC)算法优化方案。针对传统FXLMS算法在应对复杂、非线性车内噪声时的局限性,文章详细解析了如何利用神经网络作为非线性建模器、深度滤波器或智能步长调节器来增强ANC系统性能,并提供了完整的Matlab仿真实战流程,展示了深度学习在提升降噪效果和收敛速度方面的潜力。

seed的博客 540

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1530

matlab提取多边形区域_如何利用Matlab求任意多边形的面积

今天作一个有关平移的函数,其中要求任意多边形的面积自己写了些东西,希望对朋友们有点点用啦首先,任意多边形的面积公式(凹凸都可以)为:n多变形,S=1/2*sum(x(k)*y(k+1)-x(k+1)*y(k)),其中k的范围是[1,n];因为懒得找求和符号,就用sum代替了求和符号了;有了这个公式,求多变形面积就很简单,随便说句,我觉得编程或许不是很难,难就难在你首先要懂得那个问题的意思,也就是要...

weixin_29631169的博客 2415

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

求任意凸多边形面积

任意给出一个三角形ΔABC,设其顶点坐标分别为A(x1, y1),B(x2, y2),C(x3, y3),那么根据线性代数的知识,ΔABC的有向面积可表示为: 给出任意一个多边形,其顶点坐标依次为(x0,y0),(x1,y1),(x2,y2),…,(xn,yn)(其中n=2,3,4,…),则其面积可表示为: 故计算的函数为: double any_ploygon_area(int x,int ...

Happig的博客 1792

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

求任意多边形面积

其实求多边形面积有许多的方法,这里介绍一个计算几何的方法,比较神奇,只有O(n)的复杂度。 说道计算几何中的神奇方法,就不得不说到向量(又叫矢量,不过这个名词有歧义)。 向量(大佬跳过) 其实,像这种概念问题,大家都可以去问一下我度娘,还挺详细的。 简介 数学中的向量只有两个值,一个方向,一个大小,于是不论怎么平移,它不会有任何改变。不过,这样子表示向量的话,它的用处就太小了。但...

ZWC的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

已知三个点坐标求 三角形面积 || 求任意多边形面积公式||判断点在直线的左侧还是右侧

转自:https://blog.youkuaiyun.com/lirui7610/article/details/79519325 已知三个点坐标求 三角形面积 设A(x1,y1),B(x2,y2),C(x3,y3) 由A-->B-->C-->A 按逆时针方向转。(行列式书写要求) 设三角形的面积为S 则S=(1/2)*(下面行列式) |x1 y1 1| |x2 y2 ...

h_666666的博客 4068

行列式求任意多边形面积(坐标的方法)

> ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200328173723973.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2NDU2ODc5,size_16,color_FF...

m0_46456879的博客 1254

求任意多边形面积与重心的算法

题目地址http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=3多边形重心问题时间限制:3000 ms  |  内存限制:65535 KB难度:5描述在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的...

wonder13579的博客 8934

叉乘法求任意多边形的面积

1.向量的叉积几何意义:以a,b临边组成的平行四边形的面积。 2.对于逆时针的多边形,最后的面积是正值 对于顺时针的多边形,最后的面积是负值 3.S=OAE+OED+ODC+OCB+OBA 带符号运算 S_OAE=(OA*OE)/2.0; 4.叉积运算 二维向量叉乘公式a(x1,y1),b(x2,y2),则a×b=(x1y2-x2y1) 三维叉乘是行列式运算 ...

夷则九的博客 2532

叉乘求任意多边形面积

叉乘求任意多边形面积 N:多边形的顶点数目 返回值:多边形面积 注意:     支持多边形,凹凸多边形都可     多边形顶点输入顺序按顺时针排序 struct Point{ double x,y; }p[N]; int n; double polygonarea() { int i,j; double area = 0; for(i = 0;i

YouthDance 2302
上一篇: 进制转换
下一篇: hdu2045
mwhybmj
博客等级 码龄10年 8粉丝 74原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值