MATLAB画空间曲面图.docx
- 文档编号:25488851
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:9
- 大小:461.94KB
MATLAB画空间曲面图.docx
《MATLAB画空间曲面图.docx》由会员分享,可在线阅读,更多相关《MATLAB画空间曲面图.docx(9页珍藏版)》请在冰豆网上搜索。
MATLAB画空间曲面图
用matlab画隐函数曲面
matlab是一款功能强大的通用工程数学软件。
利用matlab的作图功能可以轻而易举地绘制出各种复杂函数图形。
利用ezplot甚至可以直接绘制隐函数曲线F(x,y)=0而无需将其写成y=f(x)的形式。
然而十分可惜的是与之对应的ezsurf和ezmesh却对隐函数曲面F(x,y,z)=0的绘制无能为力。
那么matlab究竟有没有用来绘制诸如F(x,y,z)=0的命令呢?
答案毫无疑问是肯定的。
事实上利用matlab的等值面函数isosurface就可以轻松搞定。
关于isosurface的具体用法大家可以自己参看help。
下面两个函数就是我利用isosurface编写的通用隐函数曲面绘制命令。
1.隐函数曲面网格图函数implicitmesh
functionh=implicitmesh(f,xlimit,ylimit,zlimit,gd)
%implicitmesh(f,span,gd):
画隐函数曲面f(x,y,z)=0的网格图,
%各坐标范围均限定在span=[lb,ub],
%网格数为gd,默认为25
%可以分别设置,如[20,25,30],分别代表xyz方向的网格数
%implicitmesh(f,xspan,yspan,zspan,gd):
画隐函数曲面f(x,y,z)=0,
%各坐标范围分别限定在xspan,yspan,zspan
%h=implicitmesh(...):
画隐函数曲面并输出句柄
%例一:
%implicitmesh(inline('x.*y+z.^2'),[-55])%注意*\^一定要设成点运算
%例二:
%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。
%implicitmesh(f,[-11],[30,20,10])
%例三:
%f=@(x,y,z)(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3;
%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;
%implicitmesh(f,[-1.51.5],[-.8.8],[-1.51.5],50);
%holdon%可以添加图形
%h=implicitmesh(g,[-2.3,2.3]);
%colormaphsv;set(h,'facecolor','none');%可以设置各种效果
%axisoff;axisequal;spinmap(10);
ifnargin==2
ylimit=xlimit;zlimit=xlimit;gd=25;
elseifnargin==3
gd=ylimit;ylimit=xlimit;zlimit=xlimit;
elseifnargin==4
gd=25;
elseifnargin==5
else
error('Errorininputarguments')
end
iflength(gd)==1
gd=[gd;gd;gd];
end
x=linspace(xlimit
(1),xlimit
(2),gd
(1));
y=linspace(ylimit
(1),ylimit
(2),gd
(2));
z=linspace(zlimit
(1),zlimit
(2),gd(3));
[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);
[f,v]=isosurface(x,y,z,val,0);
ifisempty(f)
warning('Thereisnographintherange.');
p=[];
else
newplot;
p=patch('Faces',f,'Vertices',v,'CData',v(:
3),'facecolor','w','EdgeColor','flat');
isonormals(x,y,z,val,p);view(3);gridon
end
ifnargout==0
else
h=p;
end
下面是效果图,用的是帮助文件里的3个例子
2.隐函数曲面表面图函数implicitsurf
functionh=implicitsurf(f,xlimit,ylimit,zlimit,gd)
%implicitsurf(f,span,gd):
画隐函数曲面f(x,y,z)=0的网格图,
%各坐标范围均限定在span=[lb,ub],
%网格数为gd,默认为25
%可以分别设置,如[20,25,30],分别代表xyz方向的网格数
%implicitsurf(f,xspan,yspan,zspan,gd):
画隐函数曲面f(x,y,z)=0,
%各坐标范围分别限定在xspan,yspan,zspan
%h=implicitsurf(...):
画隐函数曲面并输出句柄
%例一:
%implicitsurf(inline('x.*y+z.^2'),[-55])%注意*\^一定要设成点运算
%例二:
%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。
%implicitsurf(f,[-11],[30,20,10])
%例三:
%f=@(x,y,z)(x.^2+(9/4)*y.^2+z.^2-1).^3-x.^2.*z.^3-(9/80)*y.^2.*z.^3;
%g=@(x,y,z)(sqrt(x.^2+y.^2)-2).^2+z.^2-.09;
%h=implicitsurf(f,[-1.51.5],[-.8.8],[-1.51.5],50);
%set(h,'AmbientStrength',.5);%可以设置各种效果
%holdon%可以添加图形
%h=implicitsurf(g,[-2.3,2.3],[-2.3,2.3],[-.3,.3]);
%colormaphsv;set(h,'AmbientStrength',.8,'FaceAlpha',.5);%可以设置各种效果
%axisoff;axisequal;shadinginterp;camlight;lightinggouraud;spinmap(10);
ifnargin==2
ylimit=xlimit;zlimit=xlimit;gd=25;
elseifnargin==3
gd=ylimit;ylimit=xlimit;zlimit=xlimit;
elseifnargin==4
gd=25;
elseifnargin==5
else
error('Errorininputarguments')
end
iflength(gd)==1
gd=[gd;gd;gd];
end
x=linspace(xlimit
(1),xlimit
(2),gd
(1));
y=linspace(ylimit
(1),ylimit
(2),gd
(2));
z=linspace(zlimit
(1),zlimit
(2),gd(3));
[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);
[f,v]=isosurface(x,y,z,val,0);
ifisempty(f)
warning('Thereisnographintherange.');
p=[];
else
newplot;
p=patch('Faces',f,'Vertices',v,'CData',v(:
3),'facecolor','flat','EdgeColor','k');
isonormals(x,y,z,val,p);view(3);gridon
end
ifnargout==0
else
h=p;
end
下面是效果图,用的是帮助文件里的3个例子
将以上函数保存为m文件,文件名和函数名相同。
然后放到matlab工作目录(如work文件夹)下,之后就可在matlab中调用了。
用法可以直接helpimplicitmesh或helpimplicitsurf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 空间 曲面