matlab三维隐函数网格图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab三维隐函数网格图相关的知识,希望对你有一定的参考价值。

哪位精通MATLAB的大侠能帮我把这段语句翻译一下,我查了一些资料,但是还是看不明白,或是给我个网址,我自己看也可以,谢谢了,我会追加积分的~~
x=-3:0.1:3;y=-3:0.1:3;z=-3:0.1:3;
[x,y,z]=meshgrid(x,y,z);
f=((x-y).^2-1)+((y-z).^2-1)+((z-x).^2-1);
p=patch(isosurface(x,y,z,f,0));
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
daspect([1 1 1])
view(3)
camlight; lighting phong

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
function h=implicitmesh(f,xlimit,ylimit,zlimit,gd)
%implicitmesh(f,span,gd):画隐函数曲面f(x,y,z)=0的网格图,
% 各坐标范围均限定在span=[lb,ub],
% 网格数为gd,默认为25
%implicitmesh(f,xspan,yspan,zspan,gd):画隐函数曲面f(x,y,z)=0,
% 各坐标范围分别限定在xspan,yspan,zspan
%h=implicitmesh(...):画隐函数曲面并输出句柄
%例一:
%implicitmesh(inline('x.*y+z.^2'),[-5 5])%注意*\^一定要设成点运算
%例二:
%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。
%implicitmesh(f,[-1 1],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.5 1.5],[-.8 .8],[-1.5 1.5],50);
%hold on%可以添加图形
%h=implicitmesh(g,[-2.3,2.3]);
%colormap hsv;set(h,'facecolor','none');%可以设置各种效果
%axis off;axis equal;
if nargin==2
ylimit=xlimit;zlimit=xlimit;gd=25;
elseif nargin==3
gd=ylimit;ylimit=xlimit;zlimit=xlimit;
elseif nargin==4
gd=25;
elseif nargin==5
else
error('Error in input arguments')
end
x=linspace(xlimit(1),xlimit(2),gd);
y=linspace(ylimit(1),ylimit(2),gd);
z=linspace(zlimit(1),zlimit(2),gd);
[x,y,z]=meshgrid(x,y,z);val=f(x,y,z);
[f,v]=isosurface(x,y,z,val,0);
if isempty(f)
warning('There is no graph in the range.');
p=[];
else
newplot;
p=patch('Faces',f,'Vertices',v,'CData',v(:,3),'facecolor','w','EdgeColor','flat');
isonormals(x,y,z,val,p);view(3);grid on
end
if nargout==0
else
h=p;
end
参考技术A x=-3:0.1:3;y=-3:0.1:3;z=-3:0.1:3;
%产生坐标点
[x,y,z]=meshgrid(x,y,z); %弄成网格型
f=((x-y).^2-1)+((y-z).^2-1)+((z-x).^2-1); %定义函数
p=patch(isosurface(x,y,z,f,0)); %求出f这个函数在f=0的面
set(p, 'FaceColor', 'red', 'EdgeColor', 'none'); %设置颜色
daspect([1 1 1])%坐标轴比例
view(3)%三维图
camlight; lighting phong %效果

最简单的办法,就是help
比如isosurface函数,我也是help isosurface看到一些提示。
你这些帮助,应当会大致了解用法。
Good Luck
参考技术B isosurface是用来绘制等值面的函数。
如果函数有返回值,则生成的是曲面的三角网格节点和边的集合,之后需要用patch绘制。实际上得到的并不是类似用mesh或surf之类得到的网格图(surface),而是三角网格图(patch)。(但是用isosurface是目前我所知可以用来绘制一般隐函数曲面的唯一办法。暂时还未找到生成一般隐函数曲面的网格图的好办法。)
isosurface的用法还是自己看帮助文件比较好,一时半会也说不完整。大概的意思是:
fv=isosurface(x,y,z,v,val)
其中xyz是整个三维空间的网格点,可以用meshgrid生成。
v是对应于坐标(x,y,z)处的函数值
val是你要取的值,之后得到的fv就是v=val处的等值面的xyz的坐标信息,实际上是三角网格点和边的集合。

我们要绘制当v=f(x,y,z)=0处的隐函数曲面,就取val=0。
你这里是用patch进行绘制的,绘制后,颜色、环境光和视角的信息都还没有,所以还要手动定义。最后4行都是在定义这些信息。如果高兴,完全可以做出类似于用mesh或surf绘制出的彩色曲面的效果。
(如果直接用isosurface进行绘制,则会自动添加这些信息,当然以后要改也是可以改的)本回答被提问者采纳

MATLAB如何绘制三维隐函数图形

像Maple、Mathematica中就有类似implicitplot3()的三维隐函数绘图函数

自定义三维隐函数绘制函数
全世界人都知道Matlab那几千个库函数中,可恨的是,却偏偏不提供个三维隐函数的图像绘制的函数,真是郁闷死了

好,下面我们看一个三维隐函数绘制的应用,它灵活的应用了Matlab的isosurface()(等值面函数),绘制出来的图效果还比较好

function implot3(fun,rangxyz,ngrid,varargin)
%三维隐函数绘图
%
%输入参数说明
-fun 函数句柄,可以是匿名、inline和M函数
% -rangexy=[xmin xmax ymin ymax,zmin,zmax] 绘图范围
% -ngrid 绘图时计算的点数
%
%Example
%fun=@(x,y,z)(x+y+z).*(x.*y+x.*z+y.*z)-10*x.*y.*z;
%rangxyz=[1 10 1 10 1 10];ngrid=50;
%implot3(fun,rangxyz,ngrid)
%
%rewrite by dynamic
%all rights reserved by www.matlabsky.cn

x=linspace(rangexy(1),rangexy(2),ngrid);
y=linspace(rangexy(3),rangexy(4),ngrid);
z=linspace(rangexy(5),rangexy(6),ngrid);
[xx,yy,zz]=meshgrid(x,y,z);
fvector=vectorize(fun);% 将目标函数矢量化
f=f(fvector,xx,yy,zz,varargin:);
p=patch(isosurface(xx,yy,zz,f,0),varargin:);
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
daspect([1 1 1])
view(3)
camlight;
lighting phong
参考技术A 用isosurface绘制
例子:绘制x^2+y^2-z^2=1的图像
[x,y,z]=meshgrid(linspace(-10,10));
val=x.^2+y.^2-z.^2;
isosurface(x,y,z,val,1)
axis equal本回答被提问者采纳

以上是关于matlab三维隐函数网格图的主要内容,如果未能解决你的问题,请参考以下文章

高分请教高手一个绘制隐函数三维图的问题(MATLAB)

MATLAB 绘图函数总结

MATLAB 绘图函数总结

MATLAB 绘图函数总结

MATLAB如何绘制三维三次隐函数图像?

MATLAB绘图—三维网格绘图(mesh)