数学计算人员需要通过绘制三维图形或者四维图形给人们提供一种更直接的表达方式,可以使人们更直接、更清楚地了解数据的结果和本质。
MATLAB语言提供了强大的三维和四维绘图命令。
学习目标:
(1)了解三维图形的绘制;
(2)理解特殊三维图形的绘制方法;
(3)掌握三维图形显示函数和控制;
(4)了解四维图形的可视化。
1|创建三维图形三维图形视觉上层次分明、色彩鲜艳,具有很强的视觉冲击力,让观看的人驻景时间长,并留下深刻的印象。三维图形给人以真实、栩栩如生的感觉,有很高的艺术欣赏价 值。
1.1|三维图像函数绘制三维图形时常用的命令函数:
plot3:绘制三维曲线图形;
stem3: 绘制三维枝干图;
grid on: 打开坐标网格;
grid off: 关闭坐标网格;
hold: 在原有图形上添加图形;
hold on: 保持当前图形窗口内容;
hold off: 解除当前保持状态。
【例1】当输入参数是向量(x,y,z)时,利用plot3(x,y,z)生成三维曲 线。
程序命令如下:
clc;close all; clear all;t=0:pi/50:9*pi; %定义t的范围plot3(log(t),cos(t),t); %画出三维线状图axis square; %使各坐标轴的长度相等grid on % 打开坐标网格线运行结果如图1所示:
图1
1.2 三维曲线图plot3是基本的绘图命令,它把数学函数用曲线描绘出来。当输入参数是向量(x,y,z),则plot3(x,y,z)生成一条通过各个(x,y,z)点的曲线;当输入参
数是三个维数相同的矩阵X、Y、Z,plot3(X,Y,Z)将绘制X、Y、Z每一列的数据曲线。
【例2】 用plot3绘制三维曲线图。
clc; close all; clear all;x = -6:0.3:6;y = 6:-0.3:-6;z = log(-0.15*y).*cos(x);[X,Y] = meshgrid(x,y); %网格Z = exp(-0.15 * y).*cos(x);figuresubplot(2,1,1)plot3(x,y,z,'or',x,y,z);subplot(2,1,2)plot3(X,Y,Z)运行结果如图2
图2
【例3】 当输入参数是矩阵X、Y、Z时,plot3(X,Y,Z)生成的三维曲线。
程序命令如下:
clc; close all; clear all;theta = 0:.02*pi:2*pi;x = sin(theta);y = log(theta);z = cos(2*theta);figureplot3(x,y,z,'LineWidth',2)hold on;theta = 0:0.01*pi:2*pi;x = sin(theta);y = log(theta);z = cos(3*theta);plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2)grid on结果见图3:
图3
【例4】plot3指令使用示例。
程序命令如下:
clc; close all; clear all;theta = 0:.02*pi:2*pi;x = sin(theta);y = log(theta);z = cos(2*theta);figureplot3(x,y,z,'LineWidth',2)hold on;theta = 0:0.01*pi:2*pi;x = sin(theta);y = log(theta);z = cos(3*theta);plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2)grid on运行结果如图4所示。
图4
1.3 三维曲面图当矩阵过大用数字形式难以表示时,绘制曲面图形将十分有用。MATLAB用xy平面内矩形网格中的点的z坐标来定义曲面,曲面图形由连接相邻的曲线组成。
MATLAB可以生成网格图和面状图两种形式的曲面图,网格图是一种只对连接曲线着色的曲面图,面状图是对连接线及连接线构成的表面都进行着色。
函数命令如下:
mesh: 绘制三维网格图;
meshc: 绘制带有基本等高线的网格图;
meshz: 绘制带有基准平面的网格图;
surf: 绘制面状图
surfl: 绘制设定光源方向的面状图;
shding interp 和 shading flat: 把曲面上的小格平滑掉,使曲面成为光滑表面;
shding faceted: 是默认状态,曲面上有小格。
【例5】 绘制三维网格图。
程序命令如下:
clc;close all;clear;x=-10:0.5:10;y=x;[X,Y]=meshgrid(x,y); %生成网格点坐标R=log(X.^2+Y.^2);Z=cos(R);subplot(1,3,1); mesh(Z); title('mesh');%画网格图subplot(1,3,2);meshz(Z); title('meshz');%画基准网格图subplot(1,3,3);meshc(Z); title('meshc');% 画登高线网格图运行结果如图5所示。
图5
【例6】 运用mesh、meshc、meshz绘制三维网格图。
程序命令如下:
clc;close all;clear;x=-10:0.5:10;y=x;[X,Y]=meshgrid(x,y); %生成网格点坐标R=log(X.^2+Y.^2);Z=cos(R);subplot(1,3,1); mesh(Z); title('mesh');%画网格图subplot(1,3,2);meshz(Z); title('meshz');%画基准网格图subplot(1,3,3);meshc(Z); title('meshc');% 画登高线网格图运行结果如图6所示。
图6
【例7】 使用surfl命令。
程序命令如下:
clc;close all; clear;z=peaks(10); surfl(z); %画指定光源方向的面状图shading interp;%是曲面平滑colormap(hsv) %设定颜色运行结果如图7所示。
图7
【例8】 绘制三维曲面图。
程序命令如下:
clc;close all; clear;[m,n]=meshgrid(-5:0.5:5);z=-2*m.^2-3*n.^2;subplot(2,2,1);mesh(m,n,z);title('mesh');subplot(2,2,2);surf(m,n,z);title('surf');subplot(2,2,3);surfc(m,n,z);title('surfc');subplot(2,2,4);surfl(m,n,z);title('surfl');运行结果如图8所示。
图8