您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > MATLAB绘图教程02
第二节三维绘图一、绘制三维曲线的基本函数最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。其调用格式为:plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…)其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。例513绘制空间曲线该曲线对应的参数方程为t=0:pi/50:2*pi;x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);plot3(x,y,z,'p');title('Linein3-DSpace');text(0,0,0,'origin');xlabel('X');ylabel('Y');zlabel('Z');grid;二、三维曲面1.平面网格坐标矩阵的生成当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为D=[a,b]×[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点做平行轴的直线,把区域D分成m×n个小矩形。生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。产生平面区域内的网格坐标矩阵有两种方法:利用矩阵运算生成。x=a:dx:b;y=(c:dy:d)’;X=ones(size(y))*x;Y=y*ones(size(x));经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。利用meshgrid函数生成;x=a:dx:b;y=c:dy:d;[X,Y]=meshgrid(x,y);语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x)2、绘制三维曲面的函数Matlab提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用来绘制三维网格图,而surf用来绘制三维曲面图,各线条之间的补面用颜色填充。其调用格式为:mesh(x,y,z,c)surf(x,y,z,c)一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线。例:用三维曲面图表现函数:为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。%program1x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);mesh(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh');pause;%program2x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);surf(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');pause;%program3x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);plot3(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('plot3-1');grid;程序执行结果分别如上图所示。从图中可以发现,网格图(mesh)中线条有颜色,线条间补面无颜色。曲面图(surf)的线条都是黑色的,线条间补面有颜色。进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。用plot3绘制的三维曲面实际上由三维曲线组合而成。可以分析plot(x’,y’,z’)所绘制的曲面的特征。例:绘制两个直径相等的圆管相交的图形。m=30;z=1.2*(0:m)/m;r=ones(size(z));theta=(0:m)/m*2*pi;x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵z1=z'*ones(1,m+1);x=(-m:2:m)/m;x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第一个圆管的坐标矩阵z2=r'*sin(theta);surf(x1,y1,z1);%绘制竖立的圆管axiseql,axisoffholdonsurf(x2,y2,z2);%绘制平放的圆管axiseql,axisofftitle('两个等直径圆管的交线');holdoff例:分析由函数构成的曲面形状与平面z=a的交线。此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz,其用法和mesh类似。不同的是,meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。例:在xy平面内选择[-8,8]×[-8,8]绘制函数,[x,y]=meshgrid(-8:0.5:8);z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);subplot(2,2,1);meshc(x,y,z);title('meshc');subplot(2,2,2);meshz(x,y,z);title('meshz');subplot(2,2,3);surfc(x,y,z);title('surfc');subplot(2,2,4);surfl(x,y,z);title('surfl');3、标准三维曲面Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三维图形的演示。如,sphere函数和cylinder函数分别用于绘制三维球面和柱面。sphere函数的调用格式为:[x,y,z]=sphere(n);该函数将产生(n+1)×(n+1矩阵x,y,z。采用这三个矩阵可以绘制出圆心位于原点、半径为1的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。n决定了球面的圆滑程度,其默认值为20。若n值取的比较小,则绘制出多面体的表面图。cylinder函数的调用格式为:[x,y,z]=cylinder(R,n)其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。如:cylinder(3)生成一个圆柱,cylinder([10,1])生成一个圆锥。而t=0:pi/100:4*pi;R=sin(t);cylinder(R,30);生成一个正弦圆柱面。另外Matlab还提供了一个peaks函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数:在矩形区域[-33]×[-33]的等分网格点上的函数值确定。如:z=peaks(30)将生成一个30×30矩阵,例:绘制标准三维曲面图形t=0:pi/20:2*pi;[x,y,z]=cylinder(2+sin(t),30);subplot(1,3,1);surf(x,y,z);subplot(1,3,2);[x,y,z]=sphere;surf(x,y,z);subplot(1,3,3);[x,y,z]=peaks(30);meshz(x,y,z);3‘其他三维图形。在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。bar3绘制三维条形图,常用格式为:bar3(y);bar3(x,y)在第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制y中元素的条形图。stem3函数绘制离散序列数据的三维杆图,常用格式为:stem3(z)stem3(x,y,z)第一种格式将数据序列z表示为从xy平面向上延伸的杆图,x和y自动生成。第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数要相同。pie3函数绘制三维饼图,常用格式为:pie3(x)x为向量,用x中的数据绘制一个三维饼图。fill3函数可在三维空间内绘制出填充过的多边形,常用格式为:fill3(x,y,z,c)用x,y,z做多边形的顶点,而c指定了填充的颜色。例:绘制三维图形。1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx3已知x=[2347,1827,2043,3025],绘制三维饼图4用随机的顶点坐标值画出5个黄色三角形subplot(2,2,1);bar3(magic(4));subplot(2,2,2);y=2*sin(0:pi/10:2*pi);stem3(y);subplot(2,2,3);pie3([2347,1827,2043,3025]);subplot(2,2,4);fill3(rand(3,5),rand(3,5),rand(3,5),'y');除了上面讨论的三维图形外,常用的图形还有瀑布图和三维曲面的等高线图。绘制瀑布图用waterfall函数,用法和meshz函数相似,只是它的网格线在x轴方向出现,具有瀑布效果。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。例:绘制多峰函数的瀑布图和等高线图。subplot(1,2,1);[X,Y,Z]=peaks(30);waterfall(X,Y,Z);xlabel('XX');ylabel('YY');zlabel('ZZ');subplot(1,2,2);contour3(X,Y,Z,12,'k');%其中12代表高度的等级数xlabel('XX');ylabel('YY');zlabel('ZZ');第三节三维图形的精细处理一、视点处理在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示。方位角Matlab提供了设置视点的函数view,其调用格式为:view(az,el)其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。例:从不同视点绘制多峰函数曲面。subplot(2,2,1);mesh(peaks);view(-37.5,30);title('1');subplot(2,2,2);mesh(peaks);view(0,90);title('2');subplot(2,2,3);mesh(peaks);view(90,0);title('3');subplot(2,2,4);mesh(peaks);view(-7,-10);title('4');二、色彩处理三、图形的裁剪处理Matlab定义的NaN常数可以用于表示那些不可使用的数据,利用这些特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。例如,要削掉正弦波顶部或底部大于0.5的部分,可使用下面的程序。x=0:pi/10:4*pi;y=sin(x);i=find(abs(y)0.5);x(i)=NaN;plot(x,y);例:绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。[x,y,z]=sphere(25);%生成外面的大球
本文标题:MATLAB绘图教程02
链接地址:https://www.777doc.com/doc-2882242 .html