matlab求两向量夹角_MATLAB 多边形(Polygon)面积计算

a0893cc605cdae5f66e9633fde75dfb7.png

前几天导师给了个基于三角形网格的二重积分计算题,因为涉及到三角形面积的计算,虽然已知三角形顶点坐标,可以求出边长再计算面积。但我不想这样算,毕竟显得有些繁琐。所以我就想能不能直接基于顶点坐标计算,这样就方便多了,结果一查还真有!那就是 polyarea() 函数,利用这个函数就可以轻而易举的求出任意多边形的面积了。

举个简单的例子:如下求一个三角形的面积。只需输入下述MATLAB代码

x 


执行即得:

S 

3022a0bba7313be90df5cee3dd6361ab.png
图1: 三角形

再来个复杂点的图形,比如计算一个二十九边形的面积。输入下列语句

theta 

执行得到:

S 

79c87b93b13519724a15c558bff08388.png
图2: 二十九边形

从图2可以看出,这个二十九边形就非常近似一个以原点

为圆心,
为半径的圆了,我们利用MATLAB计算一下这个圆的真实面积:
>> 

发现而这基本接近,再次侧面验证了polyarea()函数计算面积的正确性。关于polyarea()函数的使用可以查看MATLAB帮助文档。

现在我想知道的是polyarea()函数计算面积的原理,可惜的是帮助文档里面并没有说明,接着打开polyarea()函数的代码,其计算核心在第44-50行代码:

siz 

但这样看还不是很清晰,所以我又Google了一波计算原理,最终在CSDN上看到一个说人话的解释,大家可以看看。他的解释是将多边形面积计算转化为一些三角形面积的计算,最后再求和得到。我就把他的图直接搬过来了

ae6162ab3452e1a15219ae79bfe05dd3.png

他的原话是

由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得。

然后这个多边形的计算公式就是

这里其实我不太懂为什么这些三角形面积加起来就是多边形的面积。不过他后面又说其实这个原点

可以任意取,通常取为
和多边形的第一个点。选第一个点就直观多了,也好理解。

上述式子可以自己带入具体坐标值验证可以发现确实是这样的。而从polyarea()函数的代码来看,确有几分相似,所以我觉得应该也是基于这个计算原理来计算面积的。

其实在我查找的过程中,还发现一个计算多边形面积的MATLAB函数——convexHull(),官方帮助文档在此。它是用来得到Delaunay 三角剖分的凸包,不过他可以返回两个值,一个是凸包顶点,还有一个就是面积(三维就是体积了)。

这里我们就用convexHull()函数再来计算一边前面的二十九边形的面积,输入下述代码:

theta 

执行得到

s 

发现与polyarea()函数计算的结果是一致的。

这里必须说明的是:polyarea()函数对输入顶点的顺序是有要求的,即这些顶点只能是沿多边形顺时针或逆时针顺序输入,而convexHull()函数则无此要求。网上也有说法即称convexHull()函数的健壮性要好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值