多边形区域计算差异使用MatLab的Polyarea到Excel的SumProduct

时间:2016-11-07 12:15:25

标签: excel matlab

我正在计算此多边形所包围的区域:

enter image description here

由一组坐标给出:

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代码中,那么这也是一件好事。

1 个答案:

答案 0 :(得分:3)

你没有关闭多边形!

C = polyarea([Shape(:,1); 0],[Shape(:,2); 0])
  

C =

     

87.740954125

Matlab不会假设(0,0)在多边形中,除非你明确说明它!