What's wrong with my polygon area calculator code

6 ビュー (過去 30 日間)
Mert Ayduman
Mert Ayduman 2016 年 10 月 26 日
回答済み: John D'Errico 2016 年 10 月 26 日
Hi, I wrote this code. It essentially calculates area of a polygon when given coordinates by shoelace formula. But it gives me wrong answer. Couldn't figure out why.
function AreaOfPolygon = gaussarea (xymatrice)
[r,c]=size(xymatrice);
x=xymatrice(:,1);
y=xymatrice(:,2);
calculation=0;
x1=xymatrice(1,1);
y1=xymatrice(1,2);
xLast=xymatrice(r,1);
yLast=xymatrice(r,2);
for i=1:r
if i==1
calculation=calculation+(x1*(y(i+1)-yLast));
elseif i==r
calculation=calculation+(xLast*(y1-y(i-1)));
else
calculation=calculation+(x(i)*y(i+1)-y(i-1));
end
end
AreaOfPolygon=abs(calculation)/2
end
  1 件のコメント
John D'Errico
John D'Errico 2016 年 10 月 26 日
I suppose there is a good reason why you do not just use polyarea?

サインインしてコメントする。

採用された回答

John D'Errico
John D'Errico 2016 年 10 月 26 日
It seems to work for me. A simple case:
x = [0 0 1 1 0];
y = [0 1 1 0 0];
xymatrice = [x',y'];
AreaOfPolygon
AreaOfPolygon =
1
polyarea(x,y)
ans =
1
When I ran your code, it yields 1 as the result, which is indeed the area of that square.
So perhaps you can show an example where you think there is a problem. It may be a case where you have a complex polygon that is self intersecting. In that case
xymatrice = rand(10,2);
AreaOfPolygon =
1.0281
polyarea(xymatrice(:,1),xymatrice(:,2))
ans =
0.060961
So in this rather nasty case the two give different results.
plot(x,y,'o-')
But in that case, the "area" is a complicated thing.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by