cuiguanjun 2020-05-14
最近高数在学曲面,机导在学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; %表示显示网格,可以让图像看得更清楚
结果如下:
下面是一个参数方程的例子:
(u,v)u.*sin(v); (u,v)-u.*cos(v); (u,v) v; fmesh(funx,funy,funz);
结果如下:
除此之外还有很多其他的函数可以用于画三维图像哦~,比如meshz()可以画出带底座的图像, surfl()可以使图像有光照效果,以及专门画标准三维曲面的函数,比如sphere()和cynlinder()。感兴趣的话,在Matlab文档里面搜一搜就都知道啦~