步骤
1、画contour图,以得到句柄 [ C , h ]
2、得到每条等值线的坐标(C
或者h.ContourMatrix
)
3、用polyarea
计算面积
参考1 :用h
v=[2,3];
[x,y] = meshgrid(0:2,0:2);
z = [2 2 2;2 0 2;2 2 2]
[C, h] = contour(x, y, z, 2);
n = 0;
i = 1;
% ContourMatrix — 等高线定义
% 共2行 %%%%%%%%%%% [ h.ContourMatrix == C ] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 第1行 等值线1_value X1 X2 ... Xn 等值线2_value X1 X2 ... Xm ……
% 第2行 等值线1_点的数量n Y1 Y2 ... Yn 等值线2_点的数量m Y1 Y2 ... Ym ……
sz = size(h.ContourMatrix,2);
nn(1) = h.ContourMatrix(2,1); %等值线1_点的数量n
xx = h.ContourMatrix(1,2:nn(1)+1);%等值线1坐标X :X1~Xn
yy = h.ContourMatrix(2,2:nn(1)+1);%等值线1坐标Y :Y1~Yn
area(1) = polyarea(xx,yy);% 计算面积
while n+nn(i)+i < sz
n = n + nn(i);
i = i + 1;
nn(i)=h.ContourMatrix(2,n+i);
xx = h.ContourMatrix(1,n+i+1:n+nn(i)+i);
yy = h.ContourMatrix(2,n+i+1:n+nn(i)+i);
area(i) = polyarea(xx,yy);
end
参考2 :用C
参考MATLAB Answers - Vikas Sharma ,但有修改
[C,h] = contour(X,Y,Z,v); % the coontour whose area is required
% contour lines at the data values specified in the monotonically increasing vector v.
clabel(C,h); colorbar; grid on
areas = zeros(1,length(v)); % The number of areas to be calculated
i = 1; k=1; % i is for area loop. k is another couter
if ~isempty(c)
for i=1:length(v)
xx = c(1,k+1:k+c(2,k)); % x data of a particular contour line
yy = c(2,k+1:k+c(2,k)); % y data of a particular contour line
areas(i) = polyarea(xx,yy);
k=k+c(2,k)+1; % Take our counter to the next target
clear xx yy
if k>size(c,2)
break
end
end
end
areas % to see the calculated areas