心形线,是一个圆上的固定一点在它绕着与其相切且半径相同的另外一个圆周滚动时所形成的轨迹线。下面就简单讲解一下如何用matlab画出心形线。

1.心形线的数学定义

                                                                         blob.png

2.编制的绘制心形线的matlab程序代码,如下图所示:

blob.png

3.a=10 时,绘制的心形线,如下图所示:

blob.png

4.a逐渐增大时的心形线,如下图所示(采用子图模式):

blob.png

5.绘制三维的心形图形,下面是编制的代码:

blob.png

6.下面这幅图片是上一步绘制的三维心形图形。如下图所示:

blob.png

7.下面就向大家介绍一种绘制动态三维心形图形的方法,绘制代码如下图所示:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%matlab绘制动态三维心形代码,源代码如下:
%仅供参考,自助修改。  
[X,Y,Z]=meshgrid(linspace(-3,3,101)); %构造体积方程和坐标轴,画出图形; 
F=-X.^2.*Z.^3-(9/80).*Y.^2.*Z.^3+(X.^2+(9/4).*Y.^2+Z.^2-1).^3; %3D心型图方程如下; 
hFigure=figure; 
sz=get(hFigure,'Position'); 
set(hFigure,'Position',[sz(1)-0.15*sz(3)sz(2)1.3*sz(3)sz(4)]); 
set(hFigure,'color','w','menu','none') 
hAxes=axes('Parent',hFigure,'NextPlot','add','DataAspectRatio',[1 1 1],'XLim',[30 120],'YLim',[35 65],'ZLim',[30 75]); 
view([-39 30]);
axis off  
%制作出动态的隐形效果;  
hidden on  
%画出网格,制作网格动态效果;
%快渲染心得背面:
p=patch(isosurface(F,-0.001));
set(p,'FaceColor','w','EdgeColor','w');
 
%构造Y-Z平面,,描完函数在该平面的点:
for iX=[35 38 41 45 48 51 54 57 61 64 67]
    plane=reshape(F(:,iX,:),101,101);
    cData=contourc(plane,[0 0]);
    xData=iX.*ones(1,cData(2,1));
    plot3(hAxes,xData,cData(2,2:end),cData(1,2:end),'r');
    pause(.1),drawnow
end
 
%构造X-Z平面,描完函数在该平面的点:
for iY=[41 44 47 51 55 58 61]
    plane=reshape(F(iY,:,:),101,101);
    cData=contourc(plane,[0 0]);
    yData=iY.*ones(1,cData(2,1));
    plot3(hAxes,cData(2,2:end),yData,cData(1,2:end),'r');
    pause(.1),drawnow 
end
 
%构造X-Y平面,描完函数在该平面的点:
for iZ=[36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 69 71]
    plane=F(:,:,iZ);
    cData=contourc(plane,[0 0]);
    startIndex=1; 
    if size(cData,2)>(cData(2,1)+1)
       startIndex=cData(2,1)+2;
       zData=iZ.*ones(1,cData(2,1));
       plot3(hAxes,cData(1,2:(startIndex-1)),cData(2,2:(startIndex-1)),zData,'r');
    end
    zData=iZ.*ones(1,cData(2,startIndex));
    plot3(hAxes,cData(1,(startIndex+1):end),cData(2,(startIndex+1):end),zData,'r');
    pause(.1),drawnow
end
 
%给三维心着色
set(p,'FaceColor','r','EdgeColor','w');
pause(.2);
set(p,'FaceColor','w','EdgeColor','r');
%函数已经画完,接下来为文字部分;
pause(.2)
 
%设置字体大小,粗细,位置等,以下是打出I(心型图)Wendy;
text(7,50,70,'I','fontWeight','bold','FontAngle','italic','FontName','Trebuchet MS','fontsize',60,'Color','r')
    pause(.5)
text(80,50,43,'Math','fontWeight','bold','FontAngle','italic','FontName','Trebuchet MS','fontsize',60,'Color','r')
    pause(.2)
line([20 80],[50 50],[52.5 52.5],'color','r')
    line([50 50],[20 80],[52.5 52.5],'color','r')
    line([50 50],[50 50],[30 80],'color','r')
 
%制作心的动态效果
%   for i=1:28
%       set(p,'FaceColor','r','EdgeColor','w');
%       pause(.1);
%       set(p,'FaceColor','r','EdgeColor','r');
%       pause(.2)
%   end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

8.下图是上一步运行后的动态绘制三维心形的图形:

blob.png