Matlab的绘制等高线的函数有很多,例如contour,contour3,surfc等函数,但是他们绘制的等高线一般跟ZData的数据有关,因此很难画出好看的图片。因此希望寻找一个方法可以绘制出指定Z轴高度的等高线。
理论基础:contour函数中的M-等高线矩阵。
根据M-等高线矩阵的解释,加上plot3函数,建立了构建了绘制指定Z轴高度的等高线的函数,具体代码如下所示:
function conpourh(M,h)
% M----等高线矩阵
% h----自定义的指定高度
[~,c_list] = size(M);
k=1;
v(1)=M(1,1);
n(1)=M(2,1);
s(1)=2;
e(1)=s(1)+n(1)-1;
pan=1;
while pan==1
cishu=k;k=k+1;
v(k)=M(1,e(cishu)+1);
n(k)=M(2,e(cishu)+1);
s(k)=e(cishu)+2;
e(k)=s(k)+n(k)-1;
if e(k)==c_list
pan=2;
end
end
for i=1:cishu
XData=M(1,s(i):e(i));
YData=M(2,s(i):e(i));
ZData=h*ones(size(XData));
plot3(XData,YData,ZData);
hold on;
end
end
运行代码:
x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);
F = X.*exp(-X.^2-Y.^2);
su=surfc(X,Y,F);
M=su(2).ContourMatrix;
clf
su=surf(X,Y,F);
hold on;
conpourh(M,-2);
效果图:
可以通过改变plot3函数改变,显示的效果!!!