一、引言
在数学上经常要画三维曲面的图形,MATLAB提供了强大的三维绘图功能,常用的函数有mesh、surf、fmesh、fsurf、fimplicit3等,可以绘制单一的曲面,也可以绘制封闭曲面。在三重积分中经常用到封闭曲面,因此本文以旋转抛物面、抛物柱面和平面所围成的封闭曲面为例,详述了绘图过程。
二、具体实现步骤及相关代码
由于所绘封闭曲面由三张曲面围成,因此需要逐一进行绘制。
1.绘制旋转抛物面z = x^2 + y^2
首先给定自变量x和y的取值范围。考虑到旋转抛物面的特点,因此使用极坐标来处理,即设定极角和极径,再转换为直角坐标,利用mesh绘制,参考代码如下:

%绘制完整的旋转抛物面
theta = [ 0:0.001:2 ] * pi; %极角的取值范围数组
r = [ 0:0.005:1 ];%极径的取值范围数组
[R, T] = meshgrid( r, theta );%生成网格坐标
X1 = R .* cos(T);%生成横坐标
Y1 = R .* sin(T);%生成纵坐标
Z1 = X1.^2 + Y1.^2;%旋转抛物面的竖坐标
C1  = 2 * ones( size(Z1) );%指定颜色
mesh( X1, Y1, Z1, C1 );%绘制旋转抛物面的网格图

2.绘制平面z = 1
借用上一步旋转抛物面的横坐标和纵坐标,利用函数mesh绘制平面,参考代码如下:

Z2 = ones( size(X1) );%平面的竖坐标
C2  = ones( size(Z2) );%指定颜色
mesh( X1, Y1, Z2, C2 );%绘制平面的网格图

3.绘制抛物柱面y = x^2
该抛物柱面平行于z轴,因此首先在ZOX平面上生成横坐标和竖坐标的网格坐标,再利用函数mesh进行绘制,参考代码如下:

x = [ -1 : 0.001 : 1 ];%横坐标取值范围
z = [ 0 : 0.001 : 1 ];%竖坐标取值范围
[ X3, Z3 ] = meshgrid( x, z );%生成ZOX平面网格坐标
Y3 =  X3 .^ 2;%抛物柱面的纵坐标
C3 = 6 * ones( size(Z3) );%指定颜色
mesh( X3, Y3, Z3, C3 );%绘制抛物柱面的网格图

4.使用上述方法绘制的三张曲面直接融合成一张图时,结果如下:

有此图可以看出,封闭图形是画出来了,但是显然有多余的图元让图形看起来不够美观,因此可以考虑裁剪多余的图元,具体方法如下:
1)裁剪旋转抛物面多余的部分
以抛物柱面为界限,删除多余的部分,代码为:Z1( Y1 - X1.^2 < 0 ) = Inf;
同时根据经验,可以重新指定极角的取值范围。
2)裁剪平面多余的部分
仍旧以抛物柱面为界限,删除多余的部分,代码为:Z2( Y1 - X1.^2 < 0 ) = Inf;
3)裁剪抛物柱面多余的部分
以旋转抛物面为界限,删除多余的部分,代码为:Z3( Z3 < X3.^2 + Y3.^2 ) = Inf;
三、完整的代码

%绘制旋转抛物面 z = x^2 + y^2 、抛物柱面y = x^2和平面 z = 1围成的封闭图形
%%%%1-绘制旋转抛物面 z = x^2 + y^2
clear all
clc
theta = [ 0:0.001:1 ] * pi;
r = [ 0:0.005:1 ];
[R, T] = meshgrid( r, theta );
X1 = R .* cos(T);
Y1 = R .* sin(T);
Z1 = X1.^2 + Y1.^2;
%删除Z1中多余的数据,以抛物柱面y = x^2为边界
Z1( Y1 - X1.^2 < 0 ) = Inf;%可以利用赋值为Inf的方法实现删除多余的数据
C1  = 2 * ones( size(Z1) );
mesh( X1, Y1, Z1, C1 );
hold on %保持住当前图形窗口,此语句必须有
%%%%2-绘制平面 z = 1
Z2 = ones( size(X1) );
%删除Z2中多余的数据,以抛物柱面y = x^2为边界
Z2( Y1 - X1.^2 < 0 ) = Inf;
C2  = ones( size(Z2) );
mesh( X1, Y1, Z2, C2 );
%%%%3-绘制抛物柱面 y = x^2数据
x = [ -1 : 0.001 : 1 ];
z = [ 0 : 0.001 : 1 ];
[ X3, Z3 ] = meshgrid( x, z );
Y3 =  X3 .^ 2;
%删除Z3中多余的数据,以选择抛物面z = x^2 + y^2为边界
Z3( Z3 < X3.^2 + Y3.^2 ) = Inf;
C3 = 6 * ones( size(Z3) );
mesh( X3, Y3, Z3, C3 );
xlabel( 'x' )
ylabel( 'y' )
zlabel( 'z' )
axis equal
legend( '旋转抛物面', '平面', '抛物柱面' );

四、输出图形

五、补充说明
如果想绘制其它封闭曲面,可以根据上述步骤逐一绘制单张曲面,然后绘制在一个图形窗口即可,再根据需要进行裁剪即可得到完美的封闭曲面。

基于MATLAB函数mesh绘制由多张曲面围成的三维封闭曲面详解相关推荐

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

    一.引言 三维曲面在实际应用中被广泛使用,能够更好的展示三维空间中曲面,以实现三维数据的可视化. Matlab软件中可以使用mesh.fmesh.surf和fsurf等函数来实现三维曲面的绘图.其中m ...

  2. python画三维平面-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  3. python画3d图-Python 绘制酷炫的三维图步骤详解

    通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的: 这些图怎么做出来呢?今天就来分享下如何一步步绘制出三维矢量(SVG)图. 八面体 我们先以下面这个八面体 ...

  4. MATLAB函数图形绘制

    MATlAB命令 功能 fplot(fun,lims) 绘制符号函数fun在区间lims=[xmin,xmax]间的图像 plot(x,y,s) 绘制由向量x和向量y给定的离散数据连接起来的图像, s ...

  5. python绘制散点图的函数_Python用PyQt5绘制多彩随机散点图,基本控件之QPainter使用详解...

    前面内容,我们详细介绍了PyQt5中弹出式对话框. 回顾下精彩内容 Python用PyQt5制作颜色对话框,PyQt图形界面编程之QColorDialog Qt图形界面编程之QFileDialog类, ...

  6. matlab 树状链表,多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(5)编码过程——精细扫描...

    本文给出SPIHT编码的精细扫描程序,其中包括一个能够将带小数的十进制数转换为二进制表示的函数,这个转换函数可以实现任意精度的二进制转换,特别是将小数部分转换为二进制表示.希望对有需要的朋友有所帮助. ...

  7. 人工智能数学基础之函数与极限(无穷小与夹逼定理),附视频详解【菜鸟窝出品】

    人工智能的数学基础知识有哪些?这是准备转行人工智能学习者的共同问题.如果你在学习机器学习,深度学习的过程中遭遇挫折,多半是由于数学知识的阻碍.为了搞懂这个问题,菜鸟窝到处搜索答案,最终找到知乎的这个回 ...

  8. MATLAB生成伯努利图分布,C++ - 随机生成器 伯努利分布(bernoulli distribution) 的 详解 及 代码...

    随机生成器 伯努利分布(bernoulli distribution) 的 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/deta ...

  9. 怎么用matlab做三维正方体,用Matlab三维网线图函数mesh绘制正方体

    三维立体图如下: A'------------B' /|            /| / |           / | D'------------C' | |  |          |  | | ...

  10. 用matlab用mesh画正方体,用Matlab三维网线图函数mesh绘制正方体

    三维立体图如下: A'------------B' /|            /| / |           / | D'------------C' | |  |          |  | | ...

最新文章

  1. 【2-SAT问题】解题报告:POJ 3678 Katu Puzzle(2-SAT问题的判定)
  2. 机器学习数据预处理之缺失值:固定值填充
  3. 软件工程-第一次作业
  4. Trie 树——搜索关键词提示 1
  5. ACM竞赛学习整理开篇之01背包问题
  6. css应用网页设计,CSS技术在网页设计中的运用
  7. Linux中打包和解压到的方法
  8. js能订阅mq吗_测试工程师,必须了解的MQ知识!
  9. script filename php,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
  10. 当集合a为空集时a的取值范围_1.2 集合间的基本关系20202021学年高一数学新教材配套学案(人教A版必修第一册)...
  11. “树人杯”辽宁科技大学第三届校园程序设计大赛
  12. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)
  13. 委托/事件/线程传参简单理解
  14. mysql检查所作的修正_MySQL常见故障检测和修正_mysql
  15. pr cpu100%_Pr插件
  16. httpclient4 post提交请求乱码问题解决
  17. java 中英文长度_Java--计算中英文长度的若干种方法
  18. win10c盘清理(win10磁盘清理和磁盘整理)
  19. HDU3713 Double Maze(BFS)
  20. 解决 HBuilderX 控制台报libpng warning: iCCP: cHRM chunk does not match sRGB的问题

热门文章

  1. 2063【例1.4】牛吃牧草-c++语言入门
  2. 编程算法 - 赛马问题
  3. Spotfire 表达式中的属性
  4. 如何使用MATLAB绘制出好看的火山图
  5. 在java中获取全年的节假日(包含周末和法定节假日及调休日)
  6. 汉字为什么能流传至今_《汉字为什么是方块字(节选)》阅读附答案
  7. 免费沙龙:PRINCE2项目管理认证价值与应用
  8. LDAP 统一认证 单点登录学习
  9. 微信小程序实例开发:跑起来
  10. 【JY】基于OpenSees和SAP2000静力动力计算案例分析