给定点坐标求多边形面积模板


方法:利用向量叉积求三角形面积的方法,把多边形分割成若干个三角形,然后求和得到多边形面积,计算时需要注意,给定的点的顺序必须是逆时针或者顺时针。
逆时针的方向是叉积的正方向,顺时针是叉积的负方向。

初始思路:对于上图,固定一个点AAA,剩下444个点组成333个三角形ABC,ACD,ADEABC,ACD,ADEABC,ACD,ADE,叉积求和即可。

进一步:我们可以通过叉积公式化简,比如AB→×BC→\overrightarrow{AB}\times \overrightarrow{BC}AB×BC,我们可以将AB→\overrightarrow{AB}AB拆成AX→+XB→\overrightarrow{AX}+\overrightarrow{XB}AX+XB。
XXX可为坐标系上任意一点,一般我们以原点OOO作为XXX在计算时最为方便。
最后我们可以化简得到:
S=∑i=0nXPi→×XPi+1→2S=\dfrac{\sum\limits_{i=0}^{n} \overrightarrow{XP_{i}}\times \overrightarrow{XP_{i+1}}}{2}S=2i=0∑n​XPi​​×XPi+1​​​
点的下标从P0P_0P0​开始,Pn=P0P_n=P_0Pn​=P0​。

如图所示,SABC=−SOAB+SOBC+SOACS_{ABC}=-S_{OAB}+S_{OBC}+S_{OAC}SABC​=−SOAB​+SOBC​+SOAC​

上面每个三角形对应两个点的叉积除以2。

因此可以用叉积计算凸多边形的面积。


代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
#define mst(a,b) memset(a,b,sizeof a)
struct P{double x,y;
}a[N];
int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lf%lf",&a[i].x,&a[i].y);}a[n].x=a[0].x,a[n].y=a[0].y;double s=0;for(int i=0;i<n;i++) s+=(a[i].x*a[i+1].y-a[i+1].x*a[i].y);s/=2;//如果点是顺时针读入就 加上绝对值 s=fabs(s); printf("Area=%.1f\n",s);return 0;
}

给定点坐标求多边形面积模板相关推荐

  1. c语言给坐标求多边形面积,多边形的面积问题

    多边形的面积问题 设构成多边形的坐标串为(xi,yi)(i=1,2,--,n),求此多边形面积A. #include #define N 10 float Area(float (*x)[2],int ...

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

    已知三个点坐标求 三角形面积 由A-->B-->C-->A 按逆时针方向转.(行列式书写要求) 设三角形的面积为S 则S=(1/2)*(下面行列式) |x1 y1 1| |x2 y2 ...

  3. 已知三点坐标求三角形面积等几何图形学问题算法

    算法1. 求多边形面积 设A(x1,y1),B(x2,y2),C(x3,y3) 由A–>B–>C–>A 按逆时针方向转.(行列式书写要求) 设三角形的面积为S 则S=(1/2)(下面 ...

  4. HDU 2036 改革春风吹满地(求多边形面积)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036 改革春风吹满地 ...

  5. 三角剖分求多边形面积的交 HDU3060

    1 //三角剖分求多边形面积的交 HDU3060 2 3 #include <iostream> 4 #include <cstdio> 5 #include <cstr ...

  6. 使用行列式公式求多边形面积

    namespace SKJZ {namespace lib{public struct Point { public float x, y;}public class Polygon{/// < ...

  7. 已知三角形三边长求面积java_已知三角形三点坐标求三角形面积.java

    已知三角形三点坐标求三角形面积 主程序代码如下: import java.util.*; public class Tringle { public static void main(String[] ...

  8. pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积

    Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_ ...

  9. HDOJ-2036 求多边形面积

    求给定的多边形面积,首先可以分割为数个三角形,分别求面积,最后累加即可. 对上图而言,多边形的面积就是:(S:1,a:2,b:3,c:4,d:5,e:6) S(1->6) = S(1,2,3) ...

最新文章

  1. mysql backup_Mysqlbackup 备份详解(mysql官方备份工具)
  2. 性能测试关注点整理总结
  3. 阮一峰react demo代码研究的学习笔记 - Chrome extension - react tool
  4. 领域应用 | 中医临床术语系统
  5. TCP的三次握手和四次挥手详解
  6. properties配置文件的加密
  7. 03. 数组中重复的数字
  8. 完美的xslt数值函数与字符串函数
  9. android:xml属性集
  10. Python基础15_装饰器
  11. 微信小程序弹框如何显示右上角的关闭
  12. 前端性能优化之----静态文件客户端离线缓存_20191110
  13. JCA - 核心类和接口
  14. 阿里云ECS七天训练营-搭建FTP
  15. Android APP 快速开发教程(安卓)
  16. iOS--上传AppStore时遇到的10个大坑
  17. K8S 部署电商项目
  18. AJAX实验(添加+模糊查询 图书)
  19. 如何打动用户?携程用户体验实践分享
  20. 使用window小娜实现文本转语音

热门文章

  1. 【计算机网络】运输层:运输层协议概述
  2. Random类有参构造和无参构造的区别
  3. 米波现场,摇一摇活动 请先设置参数设置里的SOCKET地址
  4. 彻底卸载McAfee和Agent的方法
  5. 九、stm32-蓝牙HC_05(接发通信、控制LED亮灭)
  6. centos 7.4安装codecombat
  7. WEB入门之十五 属性和样式
  8. 使用VUE仿写【E宠商城】踩坑点
  9. Qt/PyQt 重写mouseMoveEvent事件 实时监测鼠标移动
  10. python bottle使用实例