绘图教程02Word文件下载.docx
《绘图教程02Word文件下载.docx》由会员分享,可在线阅读,更多相关《绘图教程02Word文件下载.docx(11页珍藏版)》请在冰点文库上搜索。
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函数生成;
y=c:
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种不同形式的曲面。
%program1
x=0:
0.1:
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
mesh(x,y,z);
x-axis'
),ylabel('
y-axis'
),zlabel('
z-axis'
mesh'
pause;
%program2
surf(x,y,z);
surf'
%program3
plot3(x,y,z);
plot3-1'
程序执行结果分别如上图所示。
从图中可以发现,网格图(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:
x2=x'
y2=r'
z2=r'
surf(x1,y1,z1);
%绘制竖立的圆管
axiseql,axisoff
holdon
surf(x2,y2,z2);
%绘制平放的圆管
title('
两个等直径圆管的交线'
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);
meshc'
subplot(2,2,2);
meshz(x,y,z);
meshz'
subplot(2,2,3);
surfc(x,y,z);
surfc'
subplot(2,2,4);
surfl(x,y,z);
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矩阵,
绘制标准三维曲面图形
pi/20:
[x,y,z]=cylinder(2+sin(t),30);
subplot(1,3,1);
subplot(1,3,2);
[x,y,z]=sphere;
subplot(1,3,3);
[x,y,z]=peaks(30);
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个黄色三角形
bar3(magic(4));
y=2*sin(0:
pi/10:
2*pi);
stem3(y);
pie3([2347,1827,2043,3025]);
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);
XX'
YY'
ZZ'
subplot(1,2,2);
contour3(X,Y,Z,12,'
k'
%其中12代表高度的等级数
第三节三维图形的精细处理
一、视点处理
在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。
同样,从不同视点绘制的三维图形的形状也是不一样的。
视点位置可由方位角和仰角表示。
方位角
Matlab提供了设置视点的函数view,其调用格式为:
view(az,el)
其中az为方位角,el为仰角,它们均以度为单位。
系统默认的视点定义为方位角为-37.5度,仰角30度。
从不同视点绘制多峰函数曲面。
mesh(peaks);
view(-37.5,30);
1'
view(0,90);
2'
view(90,0);
3'
view(-7,-10);
4'
二、色彩处理
三、图形的裁剪处理
Matlab定义的NaN常数可以用于表示那些不可使用的数据,利用这些特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。
例如,要削掉正弦波顶部或底部大于0.5的部分,可使用下面的程序。
y=sin(x);
i=find(abs(y)>
0.5);
x(i)=NaN;
plot(x,y);
绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。
[x,y,z]=sphere(25);
%生成外面的大球
z1=z;
z1(:
1:
4)=NaN;
%将大球裁去一部分
c1=ones(size(z1));
surf(3*x,3*y,3*z1,c1);
%生成里面的小球
z2=z;
c2=2*ones(size(z2));
c2(:
4)=3*ones(size(c2(:
4)));
surf(1.5*x,1.5*y,1.5*z2,c2);
colormap([010;
0.500;
100]);
gridon
色图中使用三种颜色,外面的球是绿色,里面的球采用深浅不同的两种红色。
四、隐函数作图
如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用plot等函数绘制出图形。
但是当函数采用隐函数形式时,如:
,则很难利用上述方法绘制图形。
Matlab提供了一个ezplot函数绘制隐函数图形。
用法如下:
1、对于函数f=f(x),ezplot的调用格式为:
ezplot(f),在默认区间(-2pi,2pi)绘制图形。
ezplot(f,[a,b]),在区间(a,b)绘制
2、对于隐函数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)绘制
3、对于参数方程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)图形。
隐函数绘图举例。
ezplot('
x^2+y^2-9'
axiseql;
x^3+y^3-5*x*y+1/5'
)
cos(tan(pi*x))'
[0,1]);
8*cos(t)'
'
4*sqrt
(2)*sin(t)'
[0,2*pi])
rand(n):
生成0到1之间的n阶随机数方阵rand(m,n):
生成0到1之间的m×
n的随机数矩阵(现成的函数)另外:
Matlab随机数生成函数betarnd贝塔分布的随机数生成器binornd二项分布的随机数生成器chi2rnd卡方分布的随机数生成器exprnd指数分布的随机数生成器frndf分布的随机数生成器gamrnd伽玛分布的随机数生成器geornd几何分布的随机数生成器hygernd超几何分布的随机数生成器lognrnd对数正态分布的随机数生成器nbinrnd负二项分布的随机数生成器ncfrnd非中心f分布的随机数生成器nctrnd非中心t分布的随机数生成器ncx2rnd非中心卡方分布的随机数生成器normrnd正态(高斯)分布的随机数生成器poissrnd泊松分布的随机数生成器raylrnd瑞利分布的随机数生成器trnd学生氏t分布的随机数生成器unidrnd离散均匀分布的随机数生成器unifrnd连续均匀分布的随机数生成器weibrnd威布尔分布的随机数生成器。