三维图形的绘制
生成绘图所需的横纵坐标(meshgrid函数)
[X,Y]=meshgrid(xgv,ygv)
% 函数解释:X和Y是用于接收返回值的变量,是两个大小相等的矩阵
% xgv和ygv是分别用于表示x和y取值范围的行向量,如果省略一个则默认x和y取值范围相同。
% 函数原理:X由xgv复制length(ygv)行得到,Y首先ygv进行转置,再将ygv'复制length(xgv)次得到。
三维网格图的绘制(mesh函数家族)
网格图绘制效果:由多个网格拼接构成的图形称为网格图。网格图可以用于二元函数图像的绘制。
基本语法
1.mesh(X,Y,Z):最基础的使用语法。
% 其中X是n维行向量,Y是m维行向量,Z是m×n的矩阵。
% 函数解释:构造的三维点共有m×n个,每一个三维点的坐标为(X(j),Y(i),Z(i,j)))
% 理解方式:相当于对X和Y向量中相邻的两个元素(对应四个点)绘制一个三维平面,然后再向后挪一个,对下一对相邻元素绘制一个三位平面,最后把绘制的所有三维平面拼接在一起。
% 函数的绘图结果中线条的颜色反映了点的高度。
2.mesh(Z):最基础使用语法的简化形式。
% 其中Z是一个m×n的矩阵。
% 函数解释:省略了X和Y向量,默认X是从1到Z矩阵列数的等差数列向量,Y是从1到Z矩阵行数的等差数列向量。
3.mesh(X,Y,Z):mesh函数最常用的语法形式。
% 其中X和Y和Z都是m×n的矩阵。
% 第一种形式中X和Y分别是m维和n维行向量,系统会自动将X和Y分别重复扩展为m×n的矩阵,变为第三种形式。
% 函数解释:定义了X、Y和Z三个矩阵后相当于得到了一个由三维点坐标构成的矩阵,对坐标点矩阵中所有行列相邻的四个元素绘制一个平面,拼接在一起就构成了最终的网格图。
实战案例
题目要求:绘制z=x²-y平方的函数图像,其中x和y的取值范围都是[0,10]。
绘制Matlab代码:
X=repmat(linspace(0,10,20),20,1)
Y=repmat(linspace(0,10,20)',1,20);
% 此处X和Y的生成过程可以用meshgrid函数代替:[X,Y]=meshgrid(linspace(0,10,20)
Z=X.*X-Y.*Y;
mesh(X,Y,Z)
绘制效果图:
两种变形函数
- meshc函数:mesh函数的变形,绘制结果带有等高线底线。
- meshz函数:mesh函数的变形,增加绘制了曲面的底座。(使用较少)
三维曲面图的绘制(surf函数家族)
曲面图绘制效果:
绘制语法:函数名为surf,其语法与进行三维网格图绘制的mesh函数语法完全相同。
两种变形函数
- surfc函数:surf函数的变形,绘制结果带有等高线底线。
- surfl函数:surf函数的变形,绘制结果带有灯光效果。
等高线图的绘制
等高线绘制效果图:
绘制语法:
1.contour(x,y,z):最基础的等高线绘制
2.contour(x,y,z,n):指定等高线的层数为n,n为正整数
3.contour(x,y,z,heights):指定需要显示的等高线高度,用来代替第二种方法自动生成
% 参数解释:heights是一个用于表示需要显示的高度的向量
4.contour(x,y,z,[height height]):只显示高度为height的等高线
% 参数解释:height为一个整数。
两种变形函数
- contourf函数:绘制出的等高线图有颜色填充。
- contour3函数:在三维空间中绘制等高线图。
函数解释:在x-y平面上绘制等高线图。
效果优化:
- 设置等高线的线形为虚线:
contour(x,y,z,"--")
- 显示每一层的高度:
contour(x,y,z,"ShowText","on")
参数函数的图像绘制
三维曲线图的绘制(plot3函数和fplot3函数)
- 函数语法:
plot3(x,y,z)
- 函数解释:x和y和z是维数相等的三个向量。
- 绘制样例和效果:
t=0:0.01:4*pi;
x=sin(t)+1;
y=cos(t);
z=t;
plot3(x,y,z)
- 备注:和plot函数一样,plot3函数可以设置线的颜色、点的类型和线宽等。
在实际使用中,常常不隐式定义符号,而是通过定义符号变量的方法来显式定义符号,并使用fplot3函数进行绘图。
- 函数语法:
fplot3(x,y,z,[start,end])
- 符号变量的定义:
syms 变量名
- 语法解释:x,y,z都是符号变量的算术表达式;start和end表示符号变量的取值范围。
- 绘制样例和效果:效果与plot3函数的结果相同,只是换了一种方法。
syms t;
x=sin(t)+1;
y=cos(t);
z=t;
fplot3(x,y,z,[0,4*pi])
网格图、曲面图、等高线图绘制(fmesh、fsurf和fcontour函数)
- fmesh函数语法:
fmesh(变量名,[start1,end1,start2,end2])
- 语法解释:变量名是指以两个参数的运算式作为变量的名称,start1和start2表示两个参数各自的起始位置,end1和end2表示两个参数各自的终止位置。
- 使用样例和效果图:
syms x y;
z=x.*x-y.*y
fmesh(z,[-5,5,-10,10])
- fsurf函数和fcontour函数:fsurf函数的语法与fmesh类似,因此不作介绍。
三维隐函数图像绘制(fimplicit3函数)
- 函数句柄的生成语法:绘制三维隐函数首先需要生成表示三维隐函数表达式的函数句柄,函数句柄的生成语法如下:
函数名=@(变量名1,变量名2,变量名3)函数表达式
- 函数语法:
fimplicit3(函数名,[start1,end1,start2,end2,start3,end3])
- 函数解释:start1-3和end1-3分别指定了三个参数的变化范围。
绘图效果的优化
- 透明度设置
alpha(透明度)
函数解释:用来设置绘图的透明度,用于优化绘图效果。
透明度:一个0-1之间的浮点数(小数)。
- 设置坐标轴标签
xlabel("X轴");ylabel("Y轴");zlabel("Z轴");
- 旋转不改变坐标轴尺度(根据需要选择)
axis vid3d;
% 对于含有subplot的图,需要对每一个图都使用才能保证相同的坐标轴效果。
- 设置绘图子图(根据需要选择)
subplot(图行数,图列数,图序号)
% 图的序号是在母图中逐行标号的。
- 设置图像标题
title(标题字符串)
- 设置色彩模式
% 通过shading可以设置绘图的色彩模式
shading faceted %默认采用的模式
shading flat %去掉了绘制结果的网格线
shading interp %在flat的基础上实现了色彩的平滑过渡
- 修改线宽
以修改等高线绘制的线宽为例进行展示:在绘图函数中加上一个参数“LineWidth”并紧接着线宽长度即可。
contour(x,y,z,"LineWidth",2)
- 插入颜色栏
colorbar
- 每个坐标轴的刻度均匀(根据需要选择)
axis equal;
这样的图形在各个坐标轴的分度值上相差不是太大,更加接近真实图形。
- 自定义网格密度
在mesh类函数或fmesh函数的参数表中最后添加("MeshDensity",网格密度)
其他补充内容
- 绘图值出现非数NaN:常常由0/0导致,此时可以在被除数0后加一个Matlab常数eps来避免出现非数。
- 绘图结果的高清导出:注意需要设置尽可能高的分辨率。
- Matlab语句间换行:使用…可以实现换行,避免一行中语句过长。
- 查看某个函数的帮助文档:
doc 函数名