
数学建模更新13(MATLAB绘制三维图【上】)
发布日期:2021-05-07 23:24:45
浏览次数:22
分类:精选文章
本文共 5939 字,大约阅读时间需要 19 分钟。
MATLAB绘制三维图
一.mesh函数以及拓展函数
绘制出在某一区间内完整的网格图
1.mesh(X,Y,Z)的用法
【1】X是n维向量,Y是m维向量,Z是m*n维的矩阵
其中X是n维向量,Y是m维向量,Z是m*n维的矩阵
X = [1,2,4]Y = [3,5]Z = [4,8,10;5,9,13]mesh(X,Y,Z) % (X(j), Y(i), Z(i,j))是线框网格线的交点的坐标xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签% 三维旋转和数据游标的使用,以及X-Y视图的切换(在三维旋转状态下点击鼠标右键)% 数据游标默认只能添加一个,按住Alt键不动,可以添加多个数据游标% 插入颜色栏,可显示色阶
【2】X、Y和Z都是m*n维的矩阵
X = [1,2,4;1,2,4] % X = [1,2,4;1,2,5] Y = [3,3,3;5,5,5]Z = [4,8,10;5,9,13]mesh(X,Y,Z) % (X(i,j), Y(i,j), Z(i,j))是线框网格线的交点的坐标xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签
2.mesh(Z)的用法
其中Z是m*n维的矩阵

%% mesh(Z)的用法,其中Z是m*n维的矩阵Z = [4,8,10;5,9,13]mesh(Z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签% 等价于X = 1:3Y = 1:2Z = [4,8,10;5,9,13]mesh(X,Y,Z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签
X = [1,10,4]Y = [3,5]Z = [4,8,10;5,9,13]mesh(X,Y,Z)hidden off % 可以看到背部的图像,不会遮挡(默认是看不到的)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签% 如果觉得背部的图像显示的颜色太深了,可以更改透明度mesh(X,Y,Z)alpha(0.8) % 设置透明度为0.8,这时候隐隐约约能看到(透明度介于0-1之间,越大表示越透明)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签
3.例题
【1】 z = x2- y2
%% 例题1:绘制 z = x^2 - y^2的图像 ,其中x和y都位于[0,5]之间% linspace是Matlab中的一个函数,用于产生给定范围内指定数量的点数,相邻数据跨度相同,并返回一个行向量。% 调用方法:linspace(x1,x2,N)% 功能:用于产生x1,x2之间的N点行向量,相邻数据跨度相同。其中x1、x2、N分别为起始值、终止值、元素个数。n = 11;tem = linspace(0,5,n); % 将[0,5]这个区间等分为n个点(等差数列的形式)x = repmat(tem,n,1);y = repmat(tem',1,n);z = x.^2 - y.^2; % 要使用点运算符号哦~mesh(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
【2】 z = sin(sqrt(x2+y2))/sqrt(x2+y2)
绘制 z = sin(sqrt(x2+y2))/sqrt(x2+y2) 的图形,其中x和y都位于[-5,5]之间
%% 例题2: 绘制 z = sin(sqrt(x^2+y^2))/sqrt(x^2+y^2) 的图形,其中x和y都位于[-5,5]之间[x,y] = meshgrid(-5:0.5:5); % 快速生成网格所需的数据tem = sqrt(x.^2+y.^2)+1e-12; % tem=sqrt(x.^2+y.^2); % 在后面加上一个非常非常小的数字: 1e-12 = 10^(-12) ,当然你也可以单独找到值为0的地方对其修改z = sin(tem)./tem; % 如果不对tem处理,那么z的最中间的一个值 0/0 = NaNmesh(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
4.meshc函数
除了mesh函数图形外,还在xy平面上绘制曲面的等高线
meshc(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
5.meshz(x,y,z)函数
除了mesh函数图形外,还在xy平面上绘制曲面的底座
meshz(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
二.surf函数以及拓展
surf函数和mesh函数的的调用格式基本相同
两者的区别: mesh绘出彩色的线,surf绘出彩色的面1.surf与mesh的对比
%% 例题1的对比[x,y] = meshgrid(linspace(0,5,11));% [x,y] = meshgrid([0:0.5:5]); 或者直接写成[x,y] = meshgrid(0:0.5:5);z = x.^2 - y.^2;subplot(1,2,1) % subplot(m,n,index)mesh(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('mesh(x,y,z)')subplot(1,2,2)surf(x,y,z) xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示% axis([0,5,0,5,-inf,+inf]) % 设置坐标轴刻度范围title('surf(x,y,z)')
%% 例题2的对比[x,y] = meshgrid(-5:0.5:5); % 快速生成网格所需的数据tem = sqrt(x.^2+y.^2)+1e-12; z = sin(tem)./tem; % 如果不对tem处理,那么z的最中间的一个值 0/0 = NaNsubplot(1,2,1)mesh(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('mesh(x,y,z)')subplot(1,2,2)surf(x,y,z) % (X(j), Y(i), Z(i,j))是线框网格线的交点xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('surf(x,y,z)')
2.surfc函数
除了surf函数图形外,还在xy平面上绘制曲面的等高线
surfc(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
3.surfl函数
加上了灯光效果,看起来自然点
surfl(x,y,z)xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示
4.设置色彩模式
%% 设置色彩模式% shading 是用来处理色彩效果的,分以下三种:% shading faceted是默认的模式 % shading flat 在faceted的基础上去掉图上的网格线% shading interp 在flat的基础上进行色彩的插值处理,使色彩平滑过渡subplot(1,3,1)surf(x,y,z) % (X(j), Y(i), Z(i,j))是线框网格线的交点shading faceted % 默认的色彩模式xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('shading faceted')subplot(1,3,2)surf(x,y,z) % (X(j), Y(i), Z(i,j))是线框网格线的交点shading flat % 看起来光滑一点xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('shading flat')subplot(1,3,3)surf(x,y,z) % (X(j), Y(i), Z(i,j))是线框网格线的交点shading interp % 看起来最光滑xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签axis vis3d % 冻结屏幕高宽比,使得一个三维对象的旋转不会改变坐标轴的刻度显示title('shading interp')
三.contour函数以及拓展
1.定义函数
[x,y] = meshgrid(-3:0.1:3); % 一个语句太长时,可以加上三个点然后在下一行继续写z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)... -10* (x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3*exp(-(x+1).^2 - y.^2); % matlab中内置的peaks函数,常常作为演示使用% edit peaks
2.contour(x,y,z)
在x-y平面绘制等高线图,Matlab会自动选择等高线的层级
%% contour(x,y,z) 在x-y平面绘制等高线图,Matlab会自动选择等高线的层级contour(x,y,z)xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签
3.contour(x,y,z,n)
在x-y平面绘制等高线图,n是一个标量,那么Matlab会将等高线的层数设置为n,且会自动选择层所在的高度。
%% contour(x,y,z,n) 在x-y平面绘制等高线图,n是一个标量,那么Matlab会将等高线的层数设置为n,且会自动选择层所在的高度。contour(x,y,z,5)contour(x,y,z,5,'LineWidth',2) % 设置线的宽度为2contour(x,y,z,5,'--') % 设置等高线为虚线contour(x,y,z,5,'ShowText','on') % 显示每一层的高度contour(x,y,z,5,'--','ShowText','on','LineWidth',2) % 可以组合起来使用colorbar % 显示颜色栏,也可以手动插入xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签
4.contour(x,y,z,levels)
若想得到固定的n个高度的等高线,将levels可以设置为n元行向量,其中向量中的值为高度值。
maxz = max(max(z))minz = min(min(z))levels = linspace(minz,maxz,10) % 从最小值到最大值,等分成10个点contour(x,y,z,levels,'ShowText','on','LineWidth',1) % 最小值或者最大值可能显示不出来,因为Matlab会帮我们自动调整xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签% 思考如果只想画出高度为3的单等高线怎么办?contour(x,y,z,[3 3],'ShowText','on') xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签
contour(x,y,z,[3 3],'ShowText','on') xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签
5.contourf函数
和contour函数类似,只不过画出来的等高线图有颜色填充
contourf(x,y,z,levels,'ShowText','on') xlabel('x轴'); ylabel('y轴'); % 加上坐标轴的标签
6. contour3函数
3维等高线图,等高线不再投影到x-y平面
contour3(x,y,z,levels,'ShowText','on') xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); % 加上坐标轴的标签
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月04日 09时09分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Oracle 11G环境配置
2021-05-08
【Python】(十二)IO 文件处理
2021-05-08
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2021-05-08
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2021-05-08
C语言的数值溢出问题(上)
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
聊聊我的五一小假期
2021-05-08
数据库三个级别封锁协议
2021-05-08
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2021-05-08
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2021-05-08
SLAM学习笔记-求解视觉SLAM问题
2021-05-08
普歌-允异团队-HashMap面试题
2021-05-08
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2021-05-08
程序员应该知道的97件事
2021-05-08
create-react-app路由的实现原理
2021-05-08
Linux环境变量配置错误导致命令不能使用(杂谈)
2021-05-08
openstack安装(九)网络服务的安装--控制节点
2021-05-08
shell编程(六)语言编码规范之(变量)
2021-05-08