备战数学建模4-MATLAB绘制三维图形
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了备战数学建模4-MATLAB绘制三维图形相关的知识,希望对你有一定的参考价值。
目录
3-meshc()函数、meshz()函数、surfc()函数、surfl()函数的用法
一、MATLAB绘制三维曲线
1-plot3()函数的基本用法
plot3(x,y,z)函数中x,y,z为参数,组成一组曲线的坐标。
我们看一下例子1,使用plot3()函数绘制一条空间折线,代码如下:
x = [0.2, 1.8, 2.5] ;
y = [1.3, 2.8, 1.1] ;
z = [0.4, 1.2, 1.6] ;
plot3(x,y,z) ;
grid on ;
axis([0,3,1,3,0,2]) ;
绘制的空间折线如下所示,加了网格,有立体感。
我们看一下例子2,用200个数据点和50个数据点分别绘制螺旋线,放到一张图中,代码如下:
t = linspace(0, 10*pi, 200) ;
x = sin(t) + t.*cos(t) ;
y = cos(t) - t.*sin(t) ;
z = t ;
subplot(1,2,1) ;
plot3(x,y,z) ;
grid on ;
subplot(1,2,2) ;
plot3(x(1:4:200),y(1:4:200),z(1:4:200)) ;
grid on ;
绘制的图形如下,显然数据点越多,图形越光滑。
我们再看一下上面的例子3,空间中绘制5调正弦曲线,代码如下:
t = 0 : 0.01 : 2*pi ;
t = t' ;
x = [t,t,t,t,t] ;
y = [sin(t), sin(t)+1, sin(t)+2, sin(t)+3, sin(t)+4] ;
z = [t,t,t,t,t] ;
plot3(x,y,z) ;
绘制的图形入下所示:
当然,上述图形的绘制代码写成这样也是可以的,代码如下:
t = 0 : 0.01 : 2*pi ;
x = t ;
y = [sin(t); sin(t)+1; sin(t)+2; sin(t)+3; sin(t)+4] ;
z = t ;
plot3(x,y,z) ;
含有多组输入参数的plot3(x1,y1,z1,x2,y2,z2,...,xn,yn,zn)函数,每一组的x,y,z向量构成数据点的坐标,绘制一条曲线。
我们看一下例子4,绘制三条不同的正弦曲线,代码如下:
t1 = 0 : 0.01 : 1.5*pi ;
t2 = 0 : 0.01 : 2*pi ;
t3 = 0 : 0.01 : 3*pi ;
plot3(t1,sin(t1),t1,t2,sin(t2)+1,t2,t3,sin(t3)+2,t3) ;
绘制的图形如下所示:
含有选项的plot3(x,y,z,选项)函数,选项用于指定线型,颜色,数据点标记。
t = 0 : pi/50 : 6*pi ;
x = cos(t) ;
y = sin(t) ;
z = 2*t ;
plot3(x,y,z,'p') ;
xlabel('X') ;
ylabel('Y') ;
zlabel('Z') ;
grid on ;
绘制的图形如下所示:
2-fplot3()函数绘制三维曲线
fplot3(funx,funy,funz,tlims)函数中funx,funy,funz代表定义曲线x,y,z的函数。tlims代表参数函数自变量的取值范围,用二元向量[tmin,tmax]表示,一般默认为[-5,5]。
我们看一下例子6的代码如下所示:
xt = @(t) exp(-t/10).*sin(5*t) ;
yt = @(t) exp(-t/10).*cos(5*t) ;
zt = @(t) t ;
fplot3(xt,yt,zt,[-12,12]) ;
绘制的图形如下所示:
二、MATLAB绘制三维曲面
1-平面网格数据的生成
利用矩阵生成网格点,代码如下所示:
x = 2 : 6 ;
y = (3 : 8)' ;
X = ones(size(y)) * x ;
Y = y * ones(size(x)) ;
利用meshgrid()函数生成平面网格数据。
[X,Y] = meshgrid(x,y) ,其中参数x,y为向量,存储网格点坐标的X,Y为矩阵。
代码如下:
x = 2 : 6 ;
y = (3 : 8)' ;
[X,Y] = meshgrid(x,y) ;
2-mesh()函数和surf()函数的用法
mesh(x,y,z,c)函数用于绘制三维网格图,surf(x,y,z,c)函数用于绘制三维曲面图。
x,y是网格坐标矩阵,z是网格上的高度矩阵,c用于指定不同高度下的曲面颜色。
我们看一下上面的例子2,代码如下所示:
t = -2 : 0.2 : 2 ;
[X,Y] = meshgrid(t) ;
Z = X.*exp(-X.^2-Y.^2) ;
subplot(1,3,1) ;
mesh(X,Y,Z) ; %绘制三维网格图
subplot(1,3,2) ;
surf(X,Y,Z) ; %绘制三维曲面图
subplot(1,3,3) ;
plot3(X,Y,Z) ;%绘制三维曲线图
绘制的图形如下所示,我们可以发现三维的图像的颜色是沿着y轴变化的。
3-meshc()函数、meshz()函数、surfc()函数、surfl()函数的用法
meshc()函数绘带有等高线的三维网格曲面,meshz()函数绘制带有底座的三维网格曲面,
surfc()函数绘制具有等高线的曲面,surfl()函数绘制带有光照效果的曲面。
我们看一下例子3,用四个函数绘制曲面图,代码如下所示:
[x,y] = meshgrid(0:0.1:2, 1:0.1:3) ;
z = (x-1).^2 + (y-2).^2 - 1 ;
subplot(2,2,1) ;
meshc(x,y,z) ;
title('meshc(x,y,z)') ; %含有等高线的曲面
subplot(2,2,2) ;
meshz(x,y,z) ;
title('meshz(x,y,z)') ; %含有底座的曲面
subplot(2,2,3) ;
surfc(x,y,z) ;
title('surfc(x,y,z)') ; %含有等高线的曲面
subplot(2,2,4) ;
surfl(x,y,z) ;
title('surfl(x,y,z)') ; %含有光照效果的曲面
绘制的四个图形如下所示:
4-sphere()函数和cylinder()函数的用法
[x,y,z] = sphere(n) ;用于绘制三维求面,[x,y,z] = cylinder(R,n)函数用于绘制三维柱面。其中R是一个向量,存放柱面各个等高度上的半径。n是圆柱的圆周上有n个间隔点,要是没写,默认是20.
我们看一下上面的例子,或值柱面,花瓶,圆锥面,代码如下所示:
subplot(1,3,1) ;
[x,y,z] = cylinder() ;
surf(x,y,z) ;
subplot(1,3,2) ;
t = linspace(0,2*pi,40) ;
[x,y,z] = cylinder(cos(t)+2, 30) ;
surf(x,y,z) ;
subplot(1,3,3) ;
[x,y,z] = cylinder(0:0.2:2, 30) ;
surf(x,y,z) ;
绘制得三个图形如下所示:
5-fsurf()函数和fmesh()函数得用法
如果图形有三个参数方程定义,并且图形有两个自变量,可以使用fsurf()函数和fmesh()函数绘制曲面。
fsurf(funx,funy,funz,uvlims)函数,fmesh(funx,funy,funz,uvlims)函数,funx,funy,funz代表定义曲面坐标得函数,通常用句柄得形式表示,uvlims是自变量得取值范围。
我们看一下上面得例子6,通过参数方程绘制螺旋曲面,代码如下:
我用fsurf()函数绘制整个曲面,再用fmesh()函数绘制上半部分,上半部分是空心网格。
funx = @(u,v) u.*sin(v) ;
funy = @(u,v) -u.*cos(v) ;
funz = @(u,v) v ;
fsurf(funx, funy, funz,[-5,5,-5,2]) ;
hold on ;
fmesh(funx, funy, funz, [-5,5,-2,2]) ;
hold off ;
绘制的图形如下所示:
以上是关于备战数学建模4-MATLAB绘制三维图形的主要内容,如果未能解决你的问题,请参考以下文章