MATLAB跳动的爱心

打印 上一主题 下一主题

主题 2067|帖子 2067|积分 6201

520,一个会动的心~~~




  1. function particleHeart2
  2. % @author : slandarer
  3. % 所需匿名函数
  4. col1Func=@(n) repmat([255,158,196]./255,[n,1])+repmat([-39,-81,-56]./255,[n,1]).*rand([n,1]);
  5. col2Func=@(n) repmat([118,156,216]./255,[n,1])+repmat([137,99,39].*.1./255,[n,1]).*rand([n,1]);
  6. aFunc=@(n) eval(char([100,105,115,112,40,39,20316,32773,58,115,108,97,110,100,97,114,101,114,39,41]));
  7. szFunc=@(n) rand([n,1]).*15+8;
  8. hold on
  9. % 计算爱心点位置并绘制爱心
  10. n=120;
  11. x=linspace(-3,3,n); 
  12. y=linspace(-3,3,n);
  13. z=linspace(-3,3,n);
  14. [X,Y,Z]=ndgrid(x,y,z);
  15. F=((-(X.^2).*(Z.^3)-(9/80).*(Y.^2).*(Z.^3))+((X.^2)+(9/4).*(Y.^2)+(Z.^2)-1).^3);
  16. FV=isosurface(F,0);
  17. hpnts=FV.vertices;
  18. hpnts=(hpnts-mean(hpnts)).*[.75,.7,.7];
  19. hpnts=hpnts+rand(size(hpnts)).*.7;
  20. heartHdl=scatter3(hpnts(:,1),hpnts(:,2),hpnts(:,3),'.','SizeData',5,'CData',col1Func(size(hpnts,1)));
  21. % 计算星星位置并绘制星星
  22. sx1=rand([2e3,1]).*120-60;
  23. sy1=rand([2e3,1]).*120-60;
  24. sz1=ones(size(sx1)).*-30;
  25. star1Hdl=scatter3(sx1,sy1,sz1,'.','SizeData',szFunc(length(sx1)),'CData',col2Func(size(sx1,1)));
  26. sx2=rand([2e3,1]).*120-60;
  27. sy2=rand([2e3,1]).*120-60;
  28. sz2=rand([2e3,1]).*120-20;
  29. star2Hdl=scatter3(sx2,sy2,sz2,'.','SizeData',szFunc(length(sx2)),'CData',[1,1,1]);
  30. % 坐标区域修饰
  31. ax=gca;
  32. ax.XLim=[-30,30];
  33. ax.YLim=[-30,30];
  34. ax.ZLim=[-40,30];
  35. ax.Projection='perspective';
  36. % ax.DataAspectRatio=[1,1,1];
  37. view(-42,14);aFunc(1);
  38. ax.Color=[0,0,0];
  39. ax.XColor='none';
  40. ax.YColor='none';
  41. ax.ZColor='none';
  42. set(ax,'LooseInset',[0,0,0,0]);
  43. set(ax,'Position',[-1/5,-1/5,1+2/5,1+2/5])
  44. set(gcf,'Color',[0,0,0]);
  45. % 旋转爱心和星星
  46. theta1=0;theta2=0;theta3=0;
  47. while1
  48.     theta1=theta1-0.01;
  49.     theta2=theta2-0.003;
  50.     theta3=theta3-0.02;
  51.     set(heartHdl,'XData',hpnts(:,1).*cos(theta1)-hpnts(:,2).*sin(theta1),...
  52.                  'YData',hpnts(:,1).*sin(theta1)+hpnts(:,2).*cos(theta1))
  53.     set(star1Hdl,'XData',sx1.*cos(theta2)-sy1.*sin(theta2),...
  54.                  'YData',sx1.*sin(theta2)+sy1.*cos(theta2))
  55.     set(star2Hdl,'XData',sx2.*cos(theta3)-sy2.*sin(theta3),...
  56.                  'YData',sx2.*sin(theta3)+sy2.*cos(theta3))
  57.     pause(0.05)
  58. end
  59. end
复制代码

  1. function particleHeart2
  2. % @author : slandarer
  3. % 所需匿名函数
  4. col1Func=@(n) repmat([255,158,196]./255,[n,1])+repmat([-39,-81,-56]./255,[n,1]).*rand([n,1]);
  5. col2Func=@(n) repmat([118,156,216]./255,[n,1])+repmat([137,99,39].*.1./255,[n,1]).*rand([n,1]);
  6. aFunc=@(n) eval(char([100,105,115,112,40,39,20316,32773,58,115,108,97,110,100,97,114,101,114,39,41]));
  7. szFunc=@(n) rand([n,1]).*15+8;
  8. hold on
  9. % 计算爱心点位置并绘制爱心
  10. n=120;
  11. x=linspace(-3,3,n); 
  12. y=linspace(-3,3,n);
  13. z=linspace(-3,3,n);
  14. [X,Y,Z]=ndgrid(x,y,z);
  15. F=((-(X.^2).*(Z.^3)-(9/80).*(Y.^2).*(Z.^3))+((X.^2)+(9/4).*(Y.^2)+(Z.^2)-1).^3);
  16. FV=isosurface(F,0);
  17. hpnts=FV.vertices;
  18. hpnts=(hpnts-mean(hpnts)).*[.75,.7,.7];
  19. hpnts=hpnts+rand(size(hpnts)).*.7;
  20. heartHdl=scatter3(hpnts(:,1),hpnts(:,2),hpnts(:,3),'.','SizeData',5,'CData',col1Func(size(hpnts,1)));
  21. % 计算星星位置并绘制星星
  22. sx1=rand([2e3,1]).*120-60;
  23. sy1=rand([2e3,1]).*120-60;
  24. sz1=ones(size(sx1)).*-30;
  25. star1Hdl=scatter3(sx1,sy1,sz1,'.','SizeData',szFunc(length(sx1)),'CData',col2Func(size(sx1,1)));
  26. sx2=rand([2e3,1]).*120-60;
  27. sy2=rand([2e3,1]).*120-60;
  28. sz2=rand([2e3,1]).*120-20;
  29. star2Hdl=scatter3(sx2,sy2,sz2,'.','SizeData',szFunc(length(sx2)),'CData',[1,1,1]);
  30. % 坐标区域修饰
  31. ax=gca;
  32. ax.XLim=[-30,30];
  33. ax.YLim=[-30,30];
  34. ax.ZLim=[-40,30];
  35. ax.Projection='perspective';
  36. % ax.DataAspectRatio=[1,1,1];
  37. view(-42,14);aFunc(1);
  38. ax.Color=[0,0,0];
  39. ax.XColor='none';
  40. ax.YColor='none';
  41. ax.ZColor='none';
  42. set(ax,'LooseInset',[0,0,0,0]);
  43. set(ax,'Position',[-1/5,-1/5,1+2/5,1+2/5])
  44. set(gcf,'Color',[0,0,0]);
  45. % 旋转爱心和星星
  46. theta1=0;theta2=0;theta3=0;
  47. while1
  48.     theta1=theta1-0.01;
  49.     theta2=theta2-0.003;
  50.     theta3=theta3-0.02;
  51.     set(heartHdl,'XData',hpnts(:,1).*cos(theta1)-hpnts(:,2).*sin(theta1),...
  52.                  'YData',hpnts(:,1).*sin(theta1)+hpnts(:,2).*cos(theta1))
  53.     set(star1Hdl,'XData',sx1.*cos(theta2)-sy1.*sin(theta2),...
  54.                  'YData',sx1.*sin(theta2)+sy1.*cos(theta2))
  55.     set(star2Hdl,'XData',sx2.*cos(theta3)-sy2.*sin(theta3),...
  56.                  'YData',sx2.*sin(theta3)+sy2.*cos(theta3))
  57.     pause(0.05)
  58. end
  59. end
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表