MATLAB程序设计入门篇三维立体绘图CUMCM暑期培训MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令mesh和surf:mesh:可画出立体的「网状图」(MeshPlots)surf:可画出立体的「曲面图」(SurfacePlots)范例4-1:plotxyz001.mz=[021;324;444;768];mesh(z);xlabel('X轴=columnindex');%X轴的说明文字ylabel('Y轴=rowindex');%Y轴的说明文字MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-2:plotxyz002.m若要将与曲面对应的x坐标和y坐标都一并画出来,还可以使用mesh指令z=[021;324;444;768];mesh(z);xlabel('X轴=columnindex');%X轴的说明文字ylabel('Y轴=rowindex');%Y轴的说明文字fori=1:size(z,1)forj=1:size(z,2)h=text(j,i,z(i,j),num2str(z(i,j)));%标示曲面高度set(h,'hori','center','vertical','bottom','color','r');%改变位置及颜色endendMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-3:plotxyz011.mmeshgrid的作用是产生x及y(均为向量)为基准的格子点(GridPoints),其输出为xx及yy(均为矩阵),分别代表格子点的x坐标及y坐标。MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-3:plotxyz011.mx=3:6;y=5:9;[xx,yy]=meshgrid(x,y);%xx和yy都是矩阵zz=xx.*yy;%计算函数值zz,也是矩阵subplot(2,2,1);mesh(xx);title('xx');axistightsubplot(2,2,2);mesh(yy);title('yy');axistightsubplot(2,2,3);mesh(xx,yy,zz);title('zz对xx及yy作图');axistightcolormap(zeros(1,3));%以黑色显示MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训范例4-4:plotxyz01.m使用linspace来产生较密集的数据,以便画出由函数形成的立体网状图x=linspace(-2,2,25);%在x轴[-2,2]之间取25点y=linspace(-2,2,25);%在y轴[-2,2]之间取25点[xx,yy]=meshgrid(x,y);%xx和yy都是25×25的矩阵zz=xx.*exp(-xx.^2-yy.^2);%计算函数值,zz也是25×25的矩阵mesh(xx,yy,zz);%画出立体网状图4-1基本立体绘图指令MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-4:plotxyz01.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训范例4-5:plotxyz01.msurf和mesh指令的用法类似x=linspace(-2,2,25);%在x轴[-2,2]之间取25点y=linspace(-2,2,25);%在y轴[-2,2]之间取25点[xx,yy]=meshgrid(x,y);%xx和yy都是25×25的矩阵zz=xx.*exp(-xx.^2-yy.^2);%zz也是25×2的矩阵surf(xx,yy,zz);%画出三维曲面图4-1基本立体绘图指令MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-5:plotxyz01.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令peaks:为了方便测试立体绘图,MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点(LocalMaxima)及三个局部极小点(LocalMinima)其方程式为:yxexxyeexyxyxy311051321351222222()()()()MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令画出此函数的最快方法,即是在MATLAB命令窗口直接键入peaks,可得到下列方程式z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)...-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)...-1/3*exp(-(x+1).^2-y.^2)MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令peaks的图形MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令meshz:meshz指令有将曲面加上「围裙」或「舞台」的效果范例4-6:plotxyz03.m[x,y,z]=peaks;meshz(x,y,z);axistight;MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-6:plotxyz03.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令waterfall:waterfall指令可在x方向或y方向产生水流效果范例4-7:plotxyz04.m[x,y,z]=peaks;waterfall(x,y,z);axistight;MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-7:plotxyz04.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令meshc:meshc可同时画出网状图与「等高线」(Contours)范例4-8:plotxyz05.m[x,y,z]=peaks;meshc(x,y,z);axistight;MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-8:plotxyz05.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令plot3:plot3指令可画出三维空间中的曲线范例4-9:plotxyz06.mt=linspace(0,20*pi,501);%在0及20*pi中间取501点plot3(t.*sin(t),t.*cos(t),t);%画出tsin(t),tcos(t),t的曲线MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-9:plotxyz06.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令plot3:亦可同时画出两条三维空间中的曲线范例4-10:plotxyz07.mt=linspace(0,10*pi,501);plot3(t.*sin(t),t.*cos(t),t,t.*sin(t),t.*cos(t),-t);%同时画两条曲线MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-10:plotxyz07.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令plot3:如果输入自变量是三个大小相同的矩阵x、y、z,那么plot3会依序画出每个行向量在三维空间所对应的曲线范例4-11:plotxyz08.m[x,y]=meshgrid(-2:0.1:2);z=y.*exp(-x.^2-y.^2);plot3(x,y,z);MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-11:plotxyz08.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令plot3:上例中,所有的数据点都必需是在格子点上,MATLAB才能根据每点的高度来作图。如果所给的数据点不在格子点上,我们必需先用griddata指令来进行内插法以产生格子点MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-12:plotxyz09.mx=6*rand(100,1)-3;%x为介于[-3,3]的100点随机数y=6*rand(100,1)-3;%y为介于[-3,3]的100点随机数z=peaks(x,y);%z为peaks指令产生的100点输出[X,Y]=meshgrid(-3:0.1:3);Z=griddata(x,y,z,X,Y,'cubic');mesh(X,Y,Z);holdonplot3(x,y,z,'.','MarkerSize',16);%100个取样holdoffaxistightMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-12:plotxyz09.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令整理:基本三维立体绘图指令的列表类别指令说明网状图mesh,ezmesh立体网状图meshc,ezmeshc网状图加上等高线meshz网状图加上“围裙”(或“舞台”)曲面图surf,ezsurf三维曲面图surfc,ezsurfc曲面图加上等高线surfl曲面图加上光源MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令整理:基本三维立体绘图指令的列表类别指令说明曲线图plot3,ezplot3立体曲线图低阶函数surfaceSurf用到的低阶指令line3Plot3用到的低阶指令等高线contour,ezcontour平面上的等高线contour3空间中的等高线影像表示pcolor在二维平面中以颜色表示曲面的高度MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令ezmesh,ezsurf:如果我们只是要很快地观察一个具有二个输入的函数的图形,就可以使用ezmesh或是ezsurf等来快速地画出函数的曲面图形范例4-13:plotxyz091.msubplot(2,2,1);ezmesh('sin(x)/x*sin(y)/y');subplot(2,2,2);ezsurf('sin(x*y)/(x*y)');subplot(2,2,3);ezmeshc('sin(x)/x*sin(y)/y');subplot(2,2,4);ezsurfc('sin(x*y)/(x*y)');MATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-1基本立体绘图指令范例4-13:plotxyz091.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-2立体图形与图轴的基本技巧hiddenoff:在绘制网状图时,MATLAB会隐藏被遮盖的网线,若要使被遮盖的网线亦能呈现出来,可用hiddenoff指令若再键入hiddenon,则恢复原先的设定范例4-14:plotxyz10.m[x,y,z]=peaks;mesh(x,y,z);hiddenoffaxistightMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-2立体图形与图轴的基本技巧范例4-14:plotxyz10.mMATLAB程序设计入门篇:三维立体绘图NCUMCM暑期培训4-2立体图形