数学建模学习笔记(18):三维图形的绘制

生成绘图所需的横纵坐标(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 函数名
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值