任意多边形的面积
2015-08-24 15:51
134 查看
给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做?
我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割:
![](http://blueve.me/wp-content/uploads/2011/05/0.png)
图1
S点作为起始点(点1),a->e依次作为点2,3……。
一个三角形的面积是怎样的呢?
根据线性代数的知识,我们有如下的三角形面积公式,称之为有向面积(signed area):
![](http://blueve.me/wp-content/uploads/2011/05/f1.png)
将这个行列式以第三列展开可以得到:
![](http://blueve.me/wp-content/uploads/2011/05/f2.png)
这就是以点1、2、3构成的三角形的有向面积(点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正),那么继续我们的工作,通过三角形的面积公式,来得到多边形的面积公式:
对于图1而言,多边形的面积就是:
S(1->6)=S(1,2,3)+S(1,3,4)+S(1,4,5)+S(1,5,6)
这里我们不免有些疑问,第一,图1所给出的是凸多边形,那这种算法对于非凸多边形是否同样适用呢?比如下面这个最简单的凸多边形的图形:
![](http://blueve.me/wp-content/uploads/2011/05/1.png)
图2
用刚才的划分方法的话,就会出现一个诡异的问题,那就是有一个三角形出现在了图形的外面,而另外一个又超出了多边形的范围(划分为了Sab,Sbc两个图形),那么这样再用刚才的公式求面积,结果还是正确的么?
S(1->4)=S(1,2,3)+S(1,3,4)
先公布结论,这个式子是正确的,等等,为什么?还记得刚才我提到了那个“有向面积”的概念么?忘了的话,请回头看看加重了的字。
请注意从图中看,Sab点为顺时针排列,Sbc点为逆时针排列,面积从数值上就是从Sab这个超过范围的大三角形中去掉Sbc这个小三角形,最后的结果神奇的就是多边形Sabc的面积,那么这个结论能否推广到任意多边形呢?
![](http://blueve.me/wp-content/uploads/2011/05/2.png)
图3
在这里不做证明,下面给出的公式,就是任意多边形的面积公式:
![](http://blueve.me/wp-content/uploads/2011/05/f3.png)
我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别求面积,最后累加就可以了,把多边形分割为三角形的方式多种多样,在这里,我们按照如下图的方法分割:
![](http://blueve.me/wp-content/uploads/2011/05/0.png)
图1
S点作为起始点(点1),a->e依次作为点2,3……。
一个三角形的面积是怎样的呢?
根据线性代数的知识,我们有如下的三角形面积公式,称之为有向面积(signed area):
![](http://blueve.me/wp-content/uploads/2011/05/f1.png)
将这个行列式以第三列展开可以得到:
![](http://blueve.me/wp-content/uploads/2011/05/f2.png)
这就是以点1、2、3构成的三角形的有向面积(点如果是顺时针给出,有向面积为负,逆时针给出,有向面积为正),那么继续我们的工作,通过三角形的面积公式,来得到多边形的面积公式:
对于图1而言,多边形的面积就是:
S(1->6)=S(1,2,3)+S(1,3,4)+S(1,4,5)+S(1,5,6)
这里我们不免有些疑问,第一,图1所给出的是凸多边形,那这种算法对于非凸多边形是否同样适用呢?比如下面这个最简单的凸多边形的图形:
![](http://blueve.me/wp-content/uploads/2011/05/1.png)
图2
用刚才的划分方法的话,就会出现一个诡异的问题,那就是有一个三角形出现在了图形的外面,而另外一个又超出了多边形的范围(划分为了Sab,Sbc两个图形),那么这样再用刚才的公式求面积,结果还是正确的么?
S(1->4)=S(1,2,3)+S(1,3,4)
先公布结论,这个式子是正确的,等等,为什么?还记得刚才我提到了那个“有向面积”的概念么?忘了的话,请回头看看加重了的字。
请注意从图中看,Sab点为顺时针排列,Sbc点为逆时针排列,面积从数值上就是从Sab这个超过范围的大三角形中去掉Sbc这个小三角形,最后的结果神奇的就是多边形Sabc的面积,那么这个结论能否推广到任意多边形呢?
![](http://blueve.me/wp-content/uploads/2011/05/2.png)
图3
在这里不做证明,下面给出的公式,就是任意多边形的面积公式:
![](http://blueve.me/wp-content/uploads/2011/05/f3.png)
![](http://my.csdn.net/uploads/201207/31/1343722896_8146.png)
相关文章推荐
- 解题报告
- LA_6439_PastiPas!
- 归并排序C++实现
- [LeedCode OJ]#264 Ugly Number II
- STL学习----入门(1)[Vector]
- 搭建GoldenGate的单向复制环境
- 简道云--最基本的入门
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
- Wireshark 与 OSI模型
- DEDE织梦常用的调用方法
- MFC消息响应机制
- 第七章 快速排序
- 设计模式之策略模式
- 修改TabBar的字体大小及选中后的颜色
- 空指针和void*指针
- [LeetCode] World Search(!!!!回溯&&char *代替string&&递归)
- 设置textField的placegolder的字体大小和字体颜色
- 获取签名公钥
- PHP字符串比较
- selenium 找元素的方法