草庐IT

MATLAB函数mesh与surf等绘制三维曲面入门

撼山拔月 2023-04-22 原文

一、引言

三维曲面在实际应用中被广泛使用,能够更好的展示三维空间中曲面,以实现三维数据的可视化。
Matlab软件中可以使用mesh、fmesh、surf和fsurf等函数来实现三维曲面的绘图。其中mesh和fmesh用来绘制三维网格曲面图,surf和fsurf绘制三维曲面图。本文仅仅给出上述函数的基本用法,事实上还可以通过增加图元属性等绘制视觉效果更好的图形。
说明:下文中均是针对如下数学函数进行绘图,因此在下文中不再重述。

二、mesh基本用法

1)mesh
基本语法:mesh(X,Y,Z,C)
其中X、Y、Z是同维数的矩阵,分别表示空间曲面上点的横坐标矩阵、纵坐标矩阵和竖坐标矩阵。C为颜色矩阵,与Z的维数相同。
功能是绘制(X,Y,Z)生成的三维曲面的网格线图。

Demo1 :绘制三维网格图
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数mesh绘制网格图

%示例代码

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,z)

%运行结果

也可以在mesh中增加线条属性,其语法为:

mesh( X,Y,Z, 'PropertyName',PropertyValue,...)

%示例代码

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,z, 'LineWidth', 1.5 )

%运行结果

2)meshc
基本语法:meshc(X,Y,Z,C)
其中X、Y、Z是同维数的矩阵,分别表示空间曲面上点的横坐标矩阵、纵坐标矩阵和竖坐标矩阵。C为颜色矩阵,与Z的维数相同。
功能是绘制(X,Y,Z)生成的具有基本等高线的网格图。
Demo :绘制函数的三维网格图
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数meshc绘制网格图

%示例代码

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
meshc(x,y,z)

%运行结果

3)meshz
基本语法:meshc(X,Y,Z,C)
其中X、Y、Z是同维数的矩阵,分别表示空间曲面上点的横坐标矩阵、纵坐标矩阵和竖坐标矩阵。C为颜色矩阵,与Z的维数相同。
功能是绘制(X,Y,Z)生成的带有基准平面的网格图。
Demo :绘制带有基准平面的三维网格图
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数meshz绘制网格图
%示例代码

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
meshz(x,y,z)

%运行结果

三、fmesh的基本用法

fmesh的功能是绘制二元函数fun的三维网格图,常见有下面的用法:

fmesh( fun ),横坐标和纵坐标的范围均是[-5,5]
fmesh( fun, xyinterval ),指定x和y的范围
fmesh(funx,funy,funz),参数方程形式的函数
fmesh(funx,funy,funz,uvinterval),参数方程形式的函数,并指定了参数的取值范围

Demo :绘制三维网格图
%示例代码:

fun = @(x,y)(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
fmesh(fun)

%运行结果

四、surf基本用法

1)surf
基本语法:surf(X,Y,Z,C)
其中X、Y、Z是同维数的矩阵,分别表示空间曲面上点的横坐标矩阵、纵坐标矩阵和竖坐标矩阵。C为颜色矩阵,与Z的维数相同。
功能是绘制(X,Y,Z)生成的三维曲面图。
注意:mesh绘图结果是网格线构成的三维曲面,而surf绘图结果是曲面片拼接而成的曲面。
Demo :绘制三维曲面
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数surf绘制曲面图

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surf(x,y,z)

%运行结果

如果想得到视觉效果更好的曲面,可以增加语句shading flat以去掉曲面上的网格线
完整的代码为:

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surf(x,y,z)
shading flat

可以得到如下运行结果

此外还可以增加语句shading interp以实现曲面颜色均匀过渡。
完整的代码为:

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surf(x,y,z)
shading flat
shading interp
cmap = colorbar

可以得到如下运行结果

2)surfc
基本语法:surfc(X,Y,Z,C)
其中X、Y、Z是同维数的矩阵,分别表示空间曲面上点的横坐标矩阵、纵坐标矩阵和竖坐标矩阵。C为颜色矩阵,与Z的维数相同。
功能是绘制(X,Y,Z)生成的带有等高线的三维曲面图。

Demo :绘制带有等高线的三维曲面
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数surfc绘制曲面图
%示例代码:

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surfc(x,y,z)

%运行结果

3)surfl
基本语法:surfl(X,Y,Z,C)
功能是绘制(X,Y,Z)生成的带有光照效果的三维曲面图。

Demo :绘制带有光照效果的三维曲面
绘制步骤:
1)指定横坐标和纵坐标的范围
2)利用函数meshgrid生成横坐标、纵坐标矩阵
3)根据已知函数生成竖坐标矩阵
4)利用函数surfl绘制曲面图
%示例代码:

[x,y]=meshgrid(-4:0.1:4,-3:0.1:3);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
surfl(x,y,z)

%运行结果

五、fsurf的基本用法

fsurf的功能是绘制二元函数fun的三维曲面,常见有下面的用法:
1、fsurf( fun ),横坐标和纵坐标的范围均是[-5,5]
2、fsurf( fun, xyinterval ),指定x和y的范围
3、fsurf(funx,funy,funz),参数方程形式的函数
4、fsurf(funx,funy,funz,uvinterval),参数方程形式的函数,并指定了参数的取值范围
Demo :绘制三维曲面图
%示例代码:

fun = @(x,y)(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
furf(fun)

%运行结果

有关MATLAB函数mesh与surf等绘制三维曲面入门的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  3. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  4. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  5. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  6. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  9. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  10. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

随机推荐