MATLAB绘制三维图

  • 一.mesh函数以及拓展函数
    • 1.mesh(X,Y,Z)的用法
      • 【1】X是n维向量,Y是m维向量,Z是m*n维的矩阵
      • 【2】X、Y和Z都是m*n维的矩阵
    • 2.mesh(Z)的用法
    • 3.例题
      • 【1】 z = x^2^- y^2^
      • 【2】 z = sin(sqrt(x^2^+y^2^))/sqrt(x^2^+y^2^)
    • 4.meshc函数
    • 5.meshz(x,y,z)函数
  • 二.surf函数以及拓展
    • 1.surf与mesh的对比
    • 2.surfc函数
    • 3.surfl函数
    • 4.设置色彩模式
  • 三.contour函数以及拓展
    • 1.定义函数
    • 2.contour(x,y,z)
    • 3.contour(x,y,z,n)
    • 4.contour(x,y,z,levels)
    • 5.contourf函数
    • 6. contour3函数

一.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:3
Y = 1:2
Z = [4,8,10;5,9,13]
mesh(X,Y,Z)
xlabel('x轴');  ylabel('y轴');  zlabel('z轴');  % 加上坐标轴的标签


思考:如果X中元素不是按照从小到大排序的,图像会是什么样子?

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 = NaN
mesh(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 = NaN
subplot(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)  % 设置线的宽度为2
contour(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轴');  % 加上坐标轴的标签


考如果只想画出高度为3的单等高线怎么办?

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轴');  % 加上坐标轴的标签

数学建模更新13(MATLAB绘制三维图【上】)相关推荐

  1. 用matlab绘制P三曲线,知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线...

    导航:网站首页 > 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画三维曲线 知道曲线方程 怎么用matlab绘制三维图 一定要给出程序 , matlab怎样画 ...

  2. matlab绘制三维图

    matlab绘制三维图 1.1绘制三维图命令 plot3(x,y,z,'s'); plot3(x,y,z,'s',x1,y1,z1,'s1'-.); % 绘制多条三维图 s指定线形,色彩,数据点形状的 ...

  3. matlab 绘制三维图并标注每个点的坐标

    1.前言 基本原理是先绘制三维图,通过plot3,然后通过text函数在每个点标注出坐标,但由于点的数量多,标注会比较密集,不一定看得清楚,可以适当减少标注的点数来提高清晰度 2.代码实现 clc c ...

  4. 使用Matlab绘制三维图的几种方法

    以下六个函数都可以实现绘制三维图像: surf(xx,yy,zz); surfc(xx,yy,zz); mesh(xx,yy,zz); meshc(xx,yy,zz); meshz(xx,yy,zz) ...

  5. 用matlab绘制三维图和三视图

  6. MATLAB 绘制三维图 | 附多个实例

    文章目录 情形一:函数有显式表达式 z=f(x,y)z=f(x,y)z=f(x,y) 主要使用函数:meshgrid,mesh,fmesh 情形三:函数表达式不含有 zzz 主要使用函数:meshgr ...

  7. MATLAB 绘制三维图

    情形一:函数有显式表达式 z = f ( x , y ) z=f(x,y) z=f(x,y) 主要使用函数:meshgrid,mesh,fmesh ---------------- clc,clear ...

  8. matlab画三维图和等高线,matlab画三维等高线图

    MATLAB 三维绘图功能二维图形 ? 三维图形 图形色彩处理 句柄图形技术 图像显示技术 动画制作 三维绘图三维绘图的主要功能: 绘制三维线图 绘制等高线图 绘制伪彩色图 ...... 三维线图指令 ...

  9. matlab绘制三维立体图

    我原以为理解并且会应用matlab绘制三维图,但动起手来,我发现各种不会,弄着弄着都有点怀疑人生了.首先,plot与plot3分别绘制二维与三维的曲线,而不是曲面,这是我的一个误区!还有,当你有x,y ...

最新文章

  1. SQLServer2005数据库自动备份
  2. 初学Portal的基本概念
  3. 计算字符串和文件的MD5值
  4. purge table table_name的一点测试!
  5. SpringCloud Zuul(三)之常见用法
  6. 洛谷P1273 有线电视网
  7. 函数式编程中的两个棘手问题
  8. php关键技术,基于Apache+MySQL+PHP的关键技术分析
  9. DevExpress v15.1:Reporting控件功能增强(二)
  10. JavaScript:Web APIsDOMBOM
  11. python爬虫好学不_python爬虫难学吗
  12. 优先体验重播matlab_如何为深度Q网络实施优先体验重播
  13. 【FM】Fama-French 三因子模型
  14. mr编程实现手机流量统计和读取MySQL数据
  15. 旷视研究院获 IROS 2021 The HILTI SLAM 挑战赛冠军
  16. 微软的黑屏说明了什么?
  17. 【Docker】Dockerfile简介
  18. 颅内EEG记录揭示人类DMN网络的电生理基础
  19. QDUOJ 点击此处签到(并查集)
  20. 11款最受欢迎的亚马逊卖家工具

热门文章

  1. Java 设置Word页边距、页面大小、页面方向、页面边框
  2. 【机器人学导论(第四版)】1-绪论
  3. 【Python】P4994 终于结束的起点
  4. css3 - 图标元素动画效果3 - 图标整体在Y轴上移
  5. 第三章、vb6的ByVal与ByRef详解
  6. 组合体视图的画图步骤_组合体三视图的画法
  7. 整理的遥感期刊,SCI检索,3/4区居多
  8. 怎么用html3秒自动跳网页,HTML页面3秒后自动跳转的三种常见方法
  9. 鸿蒙初判陶镕铁,大禹治水为何还要求雨?他用金箍棒到底做什么用?
  10. linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令