一、三维图形绘制
1.曲线图绘制
- plot3(X,Y,Z):X、Y、Z为同维向量时。绘制以X,Y,Z为x,y,z坐标的三维曲线;X、Y、Z为同维矩阵时,用X、Y、Z的对应列元素绘制x,y,z坐标的曲线,曲线的条数为矩阵的列数
- plot3(X1,Y1,Z1,X2,Y2,Z2):绘制以X1,Y1,Z1和X2,Y2,Z2为x,y,z坐标的三维曲线
- plot3(X,Y,Z,’PropertyName’,PropertyValue, …):在PropertyName所规定的曲线属性下,绘制以X,Y,Z为x,y,z坐标的三维曲线
- plot3(X1,Y1,Z1,’PropertyName1′,PropertyValue1,X2,Y2,Z2,’PropertyName2′,PropertyValue2):
- 注:plot3指令用来表现的是单参数的三维曲线,而非双参数的三维曲线
1 2 3 4 5 |
theta = 0 : .01*pi : pi*2; x = sin(theta); y = cos(theta); z = cos(4*theta); figure plot3(x,y,z,'LineWidth',2);hold on; theta = 0 : .02*pi : pi*2; x = sin(theta); y = cos(theta); z = cos(4*theta); plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2); |
2.网格图绘制
三维网格图和曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理
绘制函数z = f(x,y)的三维网格图的过程如下
- 确定自变量x和y的取值范围和取值间隔
1 |
x = x1 : dx : x2; y = y1 : dy : y2; |
- 构成xoy平面上的自变量采样“格点”矩阵
- 利用‘格点’矩阵的原理生成矩阵
1 2 3 |
x = x1 : dx : x2; y = y1 : dy : y2; y = ones(size(y)) * x; Y = y*ones(size(x)); |
- 利用meshgrid指令生成‘格点’矩阵
1 2 |
x = x1 : dx : x2; y = y1 : dy : y2; [X,Y] = meshgrid(x,y); |
- 计算在自变量采样‘格点’上的函数值:Z = f(X,Y)
绘制网格图的基本mesh指令的句法格式如下
- mesh(X,Y,Z):以X为x轴自变量,Y为y轴自变量,绘制网格图;X,Y均为向量,若X、Y长度为m、n,则[m,n] = size(Z)
- mesh(Z):以Z为矩阵列下标为x轴自变量、行下标为y轴自变量,绘制网格图
- mesh(X,Y,Z,C):C为颜色,若不定义则与mesh(X,Y,Z)相同
- mesh(X,Y,Z,’PropertyName’,PropertyValue):PropertyValue用来定义网格图的属性标记
1 2 3 4 |
x = -10 : .1 : 10; y = -10 : .1 : 10; [X,Y] = meshgrid(x,y); Z = -X.^2 - Y.^2 + 200; mesh(X,Y,Z); |
3.曲面图绘制
曲面图绘制由函数surf构成,其调用格式与mesh类似
- surf(X,Y,Z)
- surf(Z)
- surf(X,Y,Z,C)
- surf(X,Y,Z,’PropertyName’,PropertyValue)
mesh指令绘制的图形是网格划分的曲面图,而surf绘制的是平滑着色的三维曲面图
1 2 3 4 |
[x,y,z] = peaks(25); figure surf(x,y,z) mesh(x,y,z) |
4.光照模型
光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能用看检测物体表面缺陷
1 2 3 4 |
figure surf(X,Y,Z,'FaceColor','red','EdgeColor','none'); camlight left; lighting phong view(-15,65) |
本例子将曲面涂成红色,并移除surf指令所定义的网格线。将发光物体加到左边。增加光源、设置照明方式至phong,使用view命令改变视角,从空间的另一个不同的点观看表面(方位角-15°,仰角65°)。最后用工具栏缩放方式放大外观
基于运用漫反射、镜面反光和环境照明模型,MATLAB中还内置了surf1函数,可以画出类似函数surf产生的带色彩的曲线。
使用单一颜色映像(如灰色、纯白、铜黄、粉红)和插值色彩,会画出效果更好的曲线
- surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°
1 2 3 |
[X,Y,Z] = peaks(30); subplot(121);surfl(X,Y,Z);colormap(copper),shading interp subplot(122);surfl(X,Y,Z,[-90,30],[.55 .6 2 10]);colormap(copper),shading interp |
注:颜色插值会使打印速度降低
5.绘制等值线图
等值线图又叫等高线图
- contour(Z):以z矩阵列下标为x轴自变量、行下标为y轴自变量,绘制等值线图
- contour(Z,n):其中的n为所绘制的图形等值线的条数
- contour(Z,v):v为向量。向量的长度为等值线的条数,且等值线的值为对应的向量的元素值
- contour(X,Y,Z):其功能为 以X为x轴自变量、Y为y轴自变量,绘制等值线图;X,Y均为向量,若X、Y长度为m、n,则[m,n] = size(Z)
- contour(X,Y,Z,n):其中的n为所绘制的图形等值线的条数
- contour(X,Y,Z,v):v为向量。向量的长度为等值线的条数,且等值线的值为对应的向量的元素值
- contour(…, LineSpec):LineSpec定义线型
1 2 3 4 5 6 |
[X,Y,Z] = peaks(30); figure subplot(221);contour(X,Y,Z);axis square subplot(222);contour(X,Y,Z,10);axis square subplot(223);contour(X,Y,Z,-10 : 10);axis square subplot(224);contour(X,Y,Z,':');axis square |
转载请注明:燕骏博客 » MATLAB自学笔记(十六):三维图形绘制
赞赏作者微信赞赏支付宝赞赏