title ('两个等直径圆管的交线'); hold off
例517 分析由函数 构成的曲面形状与平面z=a的交线。
此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz,其用法和mesh类似。不同的是,meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。
surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。
例518 在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函数,称为多峰函数,常用于三维曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数:
在矩形区域[-3 3]×[-3 3]的等分网格点上的函数值确定。如:z=peaks(30) 将生成一个30×30矩阵, 例519 绘制标准三维曲面图形 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指定了填充的颜色。 例520 绘制三维图形。
1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx 3已知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绘制。 例521 绘制多峰函数的瀑布图和等高线图。
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度。
例522 从不同视点绘制多峰函数曲面。
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);
例524 绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。
[x,y,z]=sphere(25); %生成外面的大球 z1=z;
z1(:,1:4)=NaN;%将大球裁去一部分 c1=ones(size(z1));
surf(3*x,3*y,3*z1,c1); %生成里面的小球 hold on z2=z;
c2=2*ones(size(z2));
c2(:,1:4)=3*ones(size(c2(:,1:4))); surf(1.5*x,1.5*y,1.5*z2,c2); colormap([0 1 0;0.5 0 0;1 0 0]); grid on hold off
色图中使用三种颜色,外面的球是绿色,里面的球采用深浅不同的两种红色。
四.隐函数作图
如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用plot等函数绘制出图形。但是当函数采用隐函数形式时,如: ,则很难利用上述方法绘制图形。Matlab提供了一个ezplot函数绘制隐函数图形。用法如下: ① 对于函数f=f(x),ezplot的调用格式为: ezplot(f),在默认区间(-2pi,2pi)绘制图形。 ezplot(f,[a,b]),在区间(a,b)绘制 ② 对于隐函数f=f(x,y),ezplot的调用格式为;
ezplot(f),在默认区间(-2pi,2pi),(-2pi,2pi)绘制f(x,y)=0的图形。 ezplot(f,[xmin,xmax,ymin,ymax]);在区间 绘制图形。 ezplot(f,[a,b]),在区间(a,b),(a,b)绘制 ③ 对于参数方程x=x(t),y=y(t),ezplot函数的调用格式为: ezplot(x,y),在默认区间 绘制x=x(t),y=y(t)图形。
ezplot(x,y,[tmin,tmax]),在区间(tmin,tmax)绘制x=x(t),y=y(t)图形。 例525 隐函数绘图举例。
subplot(2,2,1);
ezplot('x^2+y^2-9');axis equal; subplot(2,2,2);
ezplot('x^3+y^3-5*x*y+1/5') subplot(2,2,3);
ezplot('cos(tan(pi*x))',[0,1]); subplot(2,2,4);
ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]);
其他隐函数绘图还有,ezpolar,ezcontour,ezplot3,ezmesh,ezmeshc,ezsurf,ezsurfc。