任意多边形面积—有向面积
给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做?
我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割:
图1
(点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正)
对于图1而言,多边形的面积就是:
S(1->6)=S(1,2,3)+S(1,3,4)+S(1,4,5)+S(1,5,6)(对凸多边形同样适用)
如果我们不以多边形的某一点为顶点来划分三角形而是以任意一点,如下图,这个方法也是成立的:S = S_OAB + S_OBC + S_OCD + S_ODE + S_OEA。计算的时候,当我们取O点为原点时,可以简化计算。
当O点为原点时,根据向量的叉积计算公式,各个三角形的面积计算如下:
设a(x1,y1),b(x2,y2)
以下均为向量:
oa(x1,y1),ob(x2,y2)
oa X ob由线性代数叉积知识得:
=x1y2-x2y1
S_OAB = 0.5*(A_x*B_y - A_y*B_x) 【(A_x,A_y)为A点的坐标】
S_OBC = 0.5*(B_x*C_y - B_y*C_x)
S_OCD = 0.5*(C_x*D_y - C_y*D_x)
S_ODE = 0.5*(D_x*E_y - D_y*E_x)
S_OEA = 0.5*(E_x*A_y - E_y*A_x)
点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正,OAB即为O>A>B,即OA向量XOB向量
无需担心点点坐标为正还是负,正负只与点给出的顺序有关,最终结果取绝对值即可。
题目:hdu2036 http://acm.hdu.edu.cn/showproblem.php?pid=2036
//输入必须是将点按顺序输入,顺时还是逆时程序会处理的
#include<cstdio>
using namespace std;
double ans;
int n;
struct Point{int x,y;
}a[1000000];
int read(){int ret=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}while(ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();return ret*f;
}
int main(){n=read();//共n个点 for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y; //a[i]=(Point){read(),read()};for(int i=2;i<=n;i++) //取原点为辅助点ans+=(double)(a[i].x*a[i-1].y-a[i].y*a[i-1].x)/*记得求平行四边形面积公式吗*//2.0;//求三角形面积。全加起来就好了,因为...面积有方向(正负性),自己会消掉的 ans+=(double)(a[1].x*a[n].y-a[1].y*a[n].x)/2.0;//第1和第n个点单独处理 if(ans<0.0) ans=-ans;//顺时针与逆时针输入结果互为相反数 printf("%lf",ans);return 0;
} //起点为(0.0)时
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#define fre freopen("C:\\Users\\Dell\\Desktop\\in.txt", "r", stdin);
using namespace std;
struct area{double x;double y;
};
int main(){//fre;int t,n;double sum;struct area a[109];cin>>t;while(t--){sum=0.0;cin>>n;for(int i=0;i<n;i++)cin>>a[i].x>>a[i].y;for(int i=1;i<n-1;i++)sum+=(a[i].x*a[i+1].y-a[i+1].x*a[i].y);sum=fabs(sum/2.0); //求double绝对值用fabs,float:fabsf,int:absprintf("%.6f\n",sum);}return 0;
}
任意多边形面积—有向面积相关推荐
- 凸多边形面积_C++计算任意多边形的面积
任意多边形的面积计算_拾忆楓灵的博客-CSDN博客blog.csdn.net 计算任意多边形的面积 - tenos - 博客园www.cnblogs.com 完美解决计算3D空间任意多边形面积_S ...
- 任意多边形面积计算公式
设Ω是m边形(如下图),顶点沿边界正向排列,,坐标依次为 建立Ω的多边形区域向量图. 由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得. ...
- python计算多边形的面积并保留两位小数_计算任意多边形面积的Python实现
最近需要实现一个计算非凸多边形面积的功能,需要输入是顺次排序的多边形顶点坐标,假设输入的多边形顶点是V={v0, v1, v2, -, vn-1},则多边形的边为E={, , ,...,, }.要求输 ...
- 计算任意多边形面积的Python实现
最近需要实现一个计算非凸多边形面积的功能,需要输入是顺次排序的多边形顶点坐标,假设输入的多边形顶点是V={v0, v1, v2, -, vn-1},则多边形的边为E={<v0, v1>, ...
- C++实现——任意多边形的面积
//求任意多边形的面积 /*语法:result = polygonarea(vector<Point>&polygon, int N); 参数: polygon:多变形顶点数组 N ...
- 任意多边形面积的计算
1-原理介绍 原理论述1: 书中给出定理:任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 矢量面积=三角形两边矢量的叉乘. 如下图: 按定理,多边形面积 ...
- vue+d3.js计算任意多边形面积
效果图 代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...
- 任意多边形的面积公式
设Ω是m边形(如下图),顶点沿边界正向排列,坐标依次为 建立Ω的多边形区域向量图. 由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得. 任 ...
- 计算任意多边形的面积
转载自 对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形,计算这些三角形的面积,然后加起来即可.已知三角形顶点坐标,三角形面积可以利用向量的叉乘来计算. 对于凹多边形,如 ...
最新文章
- C# 学习笔记1 .NET平台,C#的重要概念
- 利用WIX制作安装包(2)
- CVS配置过程 (部分转)
- graphics | 基础绘图系统的拼图方法之三:使用mfrow、mfcol参数和layout函数
- 11 款最好 CSS 框架 让你的网站独领风骚
- XStream使用总结
- 【网络协议】IP协议、ARP协议、RARP协议
- 如何实现BootStrapTable的动态表格
- Cognos report studio 清单表优化实录
- Tomcat配置访问日志和线程数
- android 版本选择,谷歌服务框架版本如何选择 我该下载哪个版本解析
- 改革IMF首先要增加中国发言权
- 支持ECSHOP 2.73手机客户端
- csv是什么意思中文_CSV文件是什么意思?
- 企业流程篇--项目管理(七)
- ML-czy的小组任务3
- 机器学习回归预测_通过机器学习回归预测高中生成绩
- revit建模批量标高操作,简单的一匹。
- CBR工具(Tools)
- 主存、辅存、缓存、控存、虚存的比较分析
热门文章
- Ubuntu系统镜像盘ISO:各版本大全、国内网速下载地址(阿里云)
- Windows系统的命令窗口
- 用通俗的话解释下offsetHeight
- SpringBoot+MyBatis+MySql实现的医院管理系统
- 树莓派 天猫精灵智能灯泡_智能灯泡即使在关闭时也会用完电吗?
- 联想Thinkpad E420 重装系统
- 50万美元的1PB存储机柜是个什么样子
- JAVA Swing + Jdbc 实现宿舍管理系统
- vue中自定义组件“ directives “的常用功能
- mac用什么写python程序_macos,python_大家在mac系统都用什么编辑器写python程序?,macos,python - phpStudy...