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

您所在的位置:网站首页 曲面图像怎么画 基于MATLAB函数mesh绘制由多张曲面围成的三维封闭曲面详解

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

2024-06-10 15:11| 来源: 网络整理| 查看: 265

一、引言 在数学上经常要画三维曲面的图形,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( '旋转抛物面', '平面', '抛物柱面' );

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3