我正在计算此多边形所包围的区域:
由一组坐标给出:
0 2.06667
1.14815 2.06667
3.44444 2.75556
5.74074 3.44444
9.18519 3.44444
16.0741 2.75556
26.4074 1.83704
35.5926 1.14815
38.2333 0.688889
38.75 0.028704
我最初使用Sumproduct
method在Excel中执行此操作,并得到了一个似乎合理的答案。我正在使用的Excel公式是:
=0.5*ABS(SUMPRODUCT(F30:F39,G31:G40)-SUMPRODUCT(G30:G39,F31:F40))
与F30:G40:
0 2.06667
1.14815 2.06667
3.44444 2.75556
5.74074 3.44444
9.18519 3.44444
16.0741 2.75556
26.4074 1.83704
35.5926 1.14815
38.2333 0.688889
38.75 0.028704
0 0
结果为87.74 。
转到Matlab后,我开始使用polyarea
,答案看起来不合理。有问题的代码是:
Shape = [ 0 2.0667; 1.1482 2.0667; 3.4444 2.7556; 5.7407 3.4444; 9.1852 3.4444; 16.0741 2.7556;26.4074 1.8370; 35.5926 1.1482; 38.2333 0.6889; 38.7500 0.0287]
C = polyarea(Shape(:,1),Shape(:,2))
返回答案:
C =
47.6986
我尝试过点点顺序,因为一个答案建议here以及将最后的点添加到最后(再也找不到链接),但这似乎没有很多不同。
One answer suggested使用convhull
作为最大封闭区域,但是当前定义的Shape
返回50.34。
所以,我的问题是:如何执行此计算以获得正确的结果?基于图表,Excel提供的值看起来更正确,但根据我调查的帮助和建议,我不确定我在MatLab中做错了什么。如果错误出现在我的Excel代码中,那么这也是一件好事。
答案 0 :(得分:3)
你没有关闭多边形!
C = polyarea([Shape(:,1); 0],[Shape(:,2); 0])
C =
87.740954125
Matlab不会假设(0,0)在多边形中,除非你明确说明它!