一、三维图形绘制
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指令用来表现的是单参数的三维曲线,而非双参数的三维曲线
Python
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);
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);holdon;
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的取值范围和取值间隔
Python
x = x1 : dx : x2; y = y1 : dy : y2;
1
x=x1:dx:x2;y=y1:dy:y2;
构成xoy平面上的自变量采样“格点”矩阵
利用‘格点’矩阵的原理生成矩阵
Python
x = x1 : dx : x2; y = y1 : dy : y2;
y = ones(size(y)) * x;
Y = y*ones(size(x));
1
2
3
x=x1:dx:x2;y=y1:dy:y2;
y=ones(size(y))*x;
Y=y*ones(size(x));
利用meshgrid指令生成‘格点’矩阵
Python
x = x1 : dx : x2; y = y1 : dy : y2;
[X,Y] = meshgrid(x,y);
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用来定义网格图的属性标记
Python
x = -10 : .1 : 10; y = -10 : .1 : 10;
[X,Y] = meshgrid(x,y);
Z = -X.^2 - Y.^2 + 200;
mesh(X,Y,Z);
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绘制的是平滑着色的三维曲面图
Python
[x,y,z] = peaks(25);
figure
surf(x,y,z)
mesh(x,y,z)
1
2
3
4
[x,y,z]=peaks(25);
figure
surf(x,y,z)
mesh(x,y,z)
4.光照模型
光照是一种利用方向光源照亮物体的技术。在某些情况下,这项技术能用看检测物体表面缺陷
Python
figure
surf(X,Y,Z,'FaceColor','red','EdgeColor','none');
camlight left; lighting phong
view(-15,65)
1
2
3
4
figure
surf(X,Y,Z,'FaceColor','red','EdgeColor','none');
camlightleft;lightingphong
view(-15,65)
本例子将曲面涂成红色,并移除surf指令所定义的网格线。将发光物体加到左边。增加光源、设置照明方式至phong,使用view命令改变视角,从空间的另一个不同的点观看表面(方位角-15°,仰角65°)。最后用工具栏缩放方式放大外观
基于运用漫反射、镜面反光和环境照明模型,MATLAB中还内置了surf1函数,可以画出类似函数surf产生的带色彩的曲线。
使用单一颜色映像(如灰色、纯白、铜黄、粉红)和插值色彩,会画出效果更好的曲线
surfl(X,Y,Z,S):其中S以[Sx,Sy,Sz]或[az,el]的形式定义光源方向。在没有明确定义的情况下,其默认光源是逆时针45°
Python
[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
1
2
3
[X,Y,Z]=peaks(30);
subplot(121);surfl(X,Y,Z);colormap(copper),shadinginterp
subplot(122);surfl(X,Y,Z,[-90,30],[.55.6210]);colormap(copper),shadinginterp
注:颜色插值会使打印速度降低
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定义线型
Python
[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
1
2
3
4
5
6
[X,Y,Z]=peaks(30);
figure
subplot(221);contour(X,Y,Z);axissquare
subplot(222);contour(X,Y,Z,10);axissquare
subplot(223);contour(X,Y,Z,-10:10);axissquare
subplot(224);contour(X,Y,Z,':');axissquare
赞赏作者
喜欢 (1)or分享 (0)