MATLAB学习——三维曲面图像绘制
最近高数在学曲面,机导在学Matlab, 于是研究了一下怎么用Matlab画三维曲面,来分享一下~
在Matlab中绘制三维图像可以分为三个步骤:
1)生成平面网格数据。在Matlab中的图形绘制本质上就是描点作图法。在开始绘图之前,需要先在XY平面上生成一张平面网格数据,把平面分成一个一个小格子,作为描点的基础。这一步用到的是meshgrid()函数。meshgrid()接受两个参数x和y。x和y是两个矩阵,xij代表网格上第i行第j列位置的横坐标,yij代表网格上第i行第j列位置的纵坐标。根据x和y便能确定一张平面数据网格了。若只传一个参数,则默认x=y。示例如下:
t1=-10:0.5:10;
t2=-5:0.5:-5;
[X,Y] = meshgrid(t1,t2);
2)设置函数方程。可以是一般方程,也可以是参数方程。
3)调用绘图函数把图像画出来。如果是一般方程的形式,可以用mesh()函数,surf()函数或plot3()函数。函数接受三个参数,分别表示横,纵和竖坐标。mesh()所绘制图像,线条有颜色,线条之间无填充;surf()函数线条为黑色,线条之间有填充;plot()函数实际由一条一条三维曲线组合而成,不形成网格。如果是参数方程形式,在函数名前面加个f就好啦,即调用fmesh(), fsurf()和fplot3()。
下面是一个一般方程形式的例子:
t=-20:0.8:20;
[X,Y]=meshgrid(t);
Z=X.^2+Y.^2-Z.^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);
grid on; %表示显示网格,可以让图像看得更清楚
结果如下:
下面是一个参数方程的例子:
funx=@(u,v)u.*sin(v);
funy=@(u,v)-u.*cos(v);
funz=@(u,v) v;
fmesh(funx,funy,funz);
结果如下:
此外,Matlab还提供了专门绘制标准三维曲面的函数,比如sphere()和cylinder()。下面简单介绍一下这两个函数。
sphere()
sphere()函数用于生成半径为1的球面,返回值为球面各点x,y,z坐标,可进一步用于surf()和mesh()函数。sphere()接受多种参数,具体可参见Matlab内置文档。在这里举一个小例子:
[x,y,z]=sphere;
surf(x+4,y-2,z+2); %球心在(4,-2,2)的球面
hold on;
sphere(50); %生成一个有50*50个面的球面,参数值越大,表面越光滑
结果如下:
cylinder()
与sphere()十分类似,cylinder()函数生成单位圆柱。有趣的是,cylinder()可以设置剖面曲线,让圆柱“扭起来”。下面是一个小例子:
t=-3:0.3:3;
cylinder(sin(t),50);
结果如下:
除此之外还有很多其他的函数可以用于画三维图像哦,比如meshz()可以画出带底座的图像, surfl()可以使图像有光照效果等等。感兴趣的话,就打开Matlab去help一下这些函数吧~