Search code examples
matlabgeometrydrawingareacurve

Area between circular curves


I'm trying to calculate the surface between two circular curves (yellow surface in this picture as simplification) but I'm somehow stuck since I don't have datapoints at the same angular values of the two curves. Any ideas?

Thanks for your help!

Picture: https://i.sstatic.net/w1tI7.jpg


Solution

  • function area = area_between_curves(initial,corrected)
    
       interval = 0.1;
       x = -80:interval:80;
       y = -80:interval:80;
       [X,Y] = meshgrid(x,y);
    
       in_initial = inpolygon(X,Y,initial(:,1),initial(:,2));
       in_corrected = inpolygon(X,Y,corrected(:,1),corrected(:,2));
       in_area = xor(in_initial,in_corrected);
    
       area = interval^2*nnz(in_area);
    
       % visualization
       figure
       hold on
       plot(X(in_area),Y(in_area),'r.')
       plot(X(~in_area),Y(~in_area),'b.')
    
    end
    

    If I use the lines of the question, this is the result:

    figure

    area = 1.989710000000001e+03