matlab用我爱你绘制立体桃心,科学网—立体心形曲面绘制——隐函数图形 - 王福昌的博文...

先睹为快,看看下面的立体图形

4a2d8112a594f7bf659b802d63435f7c.png

在常用的数学软件MATLAB中输入脚本

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.5 1.5],[-.8 .8],[-1.5 1.5],50);

set(h,'AmbientStrength',.5);%可以设置各种效果

hold on%可以添加图形

h=implicitsurf(g,[-2.3,2.3],[-2.3,2.3],[-.3,.3]);

colormap hsv;set(h,'AmbientStrength',.8,'FaceAlpha',.5);%可以设置各种效果

axis off;axis equal;shading interp;camlight;lighting gouraud;

运行,即可得上面的心形和环形图形。主要依赖于下面函数implicitsurf.m,需要另存文件

%隐函数曲面表面图函数implicitsurf

function h=implicitsurf(f,xlimit,ylimit,zlimit,gd)

%implicitsurf(f,span,gd):画隐函数曲面f(x,y,z)=0的网格图,

%                          各坐标范围均限定在span=[lb,ub],

%                          网格数为gd,默认为25

%implicitsurf(f,xspan,yspan,zspan,gd):画隐函数曲面f(x,y,z)=0,

%                          各坐标范围分别限定在xspan,yspan,zspan

%h=implicitsurf(...):画隐函数曲面并输出句柄

%例一:

%implicitsurf(inline('x.*y+z.^2'),[-5 5])%注意*^一定要设成点运算

%例二:

%f=@(x,y,z)x.^2+y.^2+0*z-1;%注意如果f中不含某个变量一定要加上诸如0*y的项。

%implicitsurf(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;

% h=implicitsurf(f,[-1.5 1.5],[-.8 .8],[-1.5 1.5],50);

% set(h,'AmbientStrength',.5);%可以设置各种效果

% hold on%可以添加图形

% h=implicitsurf(g,[-2.3,2.3],[-2.3,2.3],[-.3,.3]);

% colormap hsv;set(h,'AmbientStrength',.8,'FaceAlpha',.5);%可以设置各种效果

% axis off;axis equal;shading interp;camlight;lighting gouraud;

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','flat','EdgeColor','k');

isonormals(x,y,z,val,p);view(3);grid on

end

if nargout==0

else

h=p;

end

转载本文请联系原作者获取授权,同时请注明本文来自王福昌科学网博客。

链接地址:http://blog.sciencenet.cn/blog-292361-1067769.html

上一篇:心的绘制——MATLAB下调用mupad绘制三维隐函数

下一篇:一种有效的最优化方法——Nelder-Mead单纯形直接搜索算法

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值