递归计算多边形的面积

时间:2013-04-15 16:58:04

标签: matlab

我必须在'x-vector','y-vector'中计算任意多边形的多边形(我知道的是顺时针方向顺序排列,不包括像沙漏这样的多边形)。 我尝试编写这段代码:

function [areaofit] = Polygarea(xs,ys,cor,prevsum)
  if(length(xs)~=length(ys))
    disp('dimentions error!please try again');
  end
  if(nargin==2)
    cor=1;
    prevsum=0;
  end
  if(cor==length(xs)-1)
    areaofit=prevsum;
    figure(1);
    fill(xs,ys,'r');   
    title(['Area = ' num2str(areaofit)]);
  end
  if(cor~=length(xs)-1)
    mat=[xs(1) ys(1) 1;zeros(2,3)];
    for k=2:3
      mat(k,1)=xs(cor+k-1);
      mat(k,2)=ys(cor+k-1);
      mat(k,3)=1;
    end
    farea=prevsum+abs(det(mat))/2;
    Polygarea(xs,ys,cor+1,farea);
  end

该函数适用于任何凸多边形,但它确实可以使用凹多边形(如'stars',例如)。我的解决方案可以改进什么?感谢

1 个答案:

答案 0 :(得分:1)

我认为你需要修改这一行:

farea=prevsum+abs(det(mat))/2;

farea=prevsum+det(mat)/2;

像这样,多边形中的凹陷将根据它们扫过0..2π范围的方向来增加或减少区域。为了确保您所在地区的最终正值,应该有类似areaofit=abs(prevsum);

的内容