MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~

这篇具有很好参考价值的文章主要介绍了MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hey, 圣诞节又双要到了,提前祝各位MATLABer,各位准研究生们,圣诞快乐,旗开得胜!~

今天带来两款圣诞树哈,都是可以旋转的:

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

原理和我去年发的圣诞树非常像,大家如果感兴趣可以去自行搜一下哈,这里就不浪费大篇幅写原理啦,此外,金色圣诞树的外形参考了以下两部分工作:

  • Hanchu Wang (2023). Rotating Christmas Tree(https://www.mathworks.com/matlabcentral/fileexchange/103980-rotating-christmas-tree)
  • Weisstein, Eric W. “Conical Spiral.” From MathWorld–A Wolfram Web Resource. https://mathworld.wolfram.com/ConicalSpiral.html

以下给出完整代码:


金色圣诞树

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

function XmasTree2023_1
fig = figure('Units','normalized','Position',[.1,.1,.5,.8],'Color',[0,9,33]/255);
ax  = axes('Parent',fig,'Position',[-1/4,-1/3,1+1/2,1+2/3],'UserData',[18,11,0,13,3,0,17,4,17]+97,...
      'XLim',[-7,7],'YLim',[-7,7],'ZLim',[-6,18],'Color',[0,9,33]/255); 
hold on; view(-40,15); disp(char(ax.UserData)); % rng(5)
ax.DataAspectRatio=[1,1,1.2];

XMT = @(h,r,a,z) deal((h-z)./h.*r.*cos(a.*z), (h-z)./h.*r.*sin(a.*z), z);
OFS = @(x,y,z,p) deal(x+rand(size(x)).*p-p/2, y+rand(size(y)).*p-p/2, z+rand(size(z)).*p-p/2);
%% ========================================================================
% 绘制圣诞树主体,参考:Hanchu Wang (2023). Rotating Christmas Tree 
% (https://www.mathworks.com/matlabcentral/fileexchange/103980-rotating-christmas-tree)
h = 10.05;
r = h/(1+sqrt(5));
[X,Y,Z] = XMT(h,r,100*pi,rand(3000,1).*h);
[X,Y,Z] = OFS(X,Y,Z,.1);
scatter3(X,Y,Z,12,[213,194,100]./255,'filled','MarkerFaceAlpha',.9,'MarkerEdgeAlpha',.9)

[X,Y,Z] = XMT(h,r,100*pi,rand(500,1).*h);
[X,Y,Z] = OFS(X,Y,Z,1.5);
scatter3(X,Y,Z,8,[255,255,255]./255,'filled','MarkerFaceAlpha',.2,'MarkerEdgeAlpha',.2)

[X,Y,Z] = XMT(h,r,20*pi,linspace(0,1,1000)*h);
scatter3(X,Y,Z,90,[213,194,100]./255,'filled','MarkerFaceAlpha',.2,'MarkerEdgeAlpha',.2)
scatter3(X,Y,Z,12,[255,255,255]./255,'filled','MarkerFaceAlpha',.9,'MarkerEdgeAlpha',.9)

%% 绘制星星 ================================================================
plot3(0,0,10.5,'p', 'MarkerSize',25,'MarkerFaceColor',[255,223,153]/255,'MarkerEdgeColor','none','LineWidth', 1);
starLightHdl = scatter3(0,0,10.5,8000,'o','MarkerFaceColor','w','MarkerEdgeColor','w','MarkerEdgeAlpha',0,'MarkerFaceAlpha', 0.1);

%% 绘制地面 ================================================================
a = 100;
b = (.5:a)'/a;
c = (-cos(b*2*pi)+1).^.2;
f = b-.5;
r = f'.^2+f.^2;
h = abs(ifftn(exp(5i*rand(a))./r.^1.05)).*(c*c')./2-2;
[X,Y] = meshgrid(linspace(-10,10,a)); [X,Y,h] = OFS(X,Y,h,.1);
scatter3(X(:),Y(:),h(:),8,[91,131,253]./255,'filled','MarkerFaceAlpha',.2,'MarkerEdgeAlpha',.2)
% surf(X,Y,h,'EdgeColor',[91,131,253]./255,'AlphaData',h,'FaceColor',[91,131,253]./255,'FaceAlpha','flat')
h = abs(ifftn(exp(5i*rand(a))./r.^1.05)).*(c*c')./1.5-2.5;
[X,Y] = meshgrid(linspace(-10,10,a)); [X,Y,h] = OFS(X,Y,h,.2);
scatter3(X(:),Y(:),h(:),8,[91,131,253]./255,'filled','MarkerFaceAlpha',.1,'MarkerEdgeAlpha',.1)
%% 绘制雪花 ================================================================
snowXYZ1=rand(90,3);
snowXYZ1(:,1:2)=snowXYZ1(:,1:2).*16-8;
snowXYZ1(:,3)=snowXYZ1(:,3).*20;
snowXYZ2=rand(120,3);
snowXYZ2(:,1:2)=snowXYZ2(:,1:2).*16-8;
snowXYZ2(:,3)=snowXYZ2(:,3).*20;
snowHdl1=plot3(snowXYZ1(:,1),snowXYZ1(:,2),snowXYZ1(:,3),'*','Color',[.8,.8,.8]);
snowHdl2=plot3(snowXYZ2(:,1),snowXYZ2(:,2),snowXYZ2(:,3),'.','Color',[.6,.6,.6]);
%% 旋转图像、雪花飘落 =======================================================
for i=1:1e8
    starLightHdl.SizeData=8000+sin(i/5).*1600;
    snowXYZ1(:,3)=snowXYZ1(:,3)-.05;snowXYZ2(:,3)=snowXYZ2(:,3)-.005;
    snowXYZ1(snowXYZ1(:,3)<0,3)=snowXYZ1(snowXYZ1(:,3)<0,3)+20;
    snowXYZ2(snowXYZ2(:,3)<0,3)=snowXYZ2(snowXYZ2(:,3)<0,3)+20;
    snowHdl1.XData=snowXYZ1(:,1);snowHdl1.YData=snowXYZ1(:,2);snowHdl1.ZData=snowXYZ1(:,3);
    snowHdl2.XData=snowXYZ2(:,1);snowHdl2.YData=snowXYZ2(:,2);snowHdl2.ZData=snowXYZ2(:,3);
    view([i,15]);
    drawnow;pause(.05)
end
end  

线条圣诞树

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~,matlab,开发语言

function XmasTree2023_2
fig = figure('Units','normalized','Position',[.1,.1,.5,.8],'Color',[0,9,33]/255);
ax  = axes('Parent',fig,'Position',[0,-1/6,1,1+1/3],'UserData',[18,11,0,13,3,0,17,4,17]+97,...
      'XLim',[-5,5],'YLim',[-5,5],'ZLim',[-3,14],'Color',[0,9,33]/255,...
      'XColor','none','YColor','none','ZColor','none'); 
hold on; view(-47.5,33); disp(char(ax.UserData));
ax.DataAspectRatio=[1,1,1.2];
XMT = @(h,r,a,z) deal((h-z)./h.*r.*cos(a.*z), (h-z)./h.*r.*sin(a.*z), z);
OFS = @(x,y,z,p) deal(x+rand(size(x)).*p-p/2, y+rand(size(y)).*p-p/2, z+rand(size(z)).*p-p/2);


% 绘制圣诞树主体 ===========================================================
h = 10.05;
r = h/(1+sqrt(5));
[X,Y,Z] = XMT(h,r,100*pi,linspace(0,1,200)*h);
plot3(X,Y,Z,'Color',[76,103,86,250]./255,'LineWidth',1)

[X,Y,Z] = XMT(h,r,90*pi,linspace(0,1,50)*h);
[X,Y,Z] = OFS(X,Y,Z,.1);
scatter3(X,Y,Z,20,[213,194,100]./255,'filled','MarkerFaceAlpha',.9,'MarkerEdgeAlpha',.9)
scatter3(X,Y,Z,150,[213,194,100]./255,'filled','MarkerFaceAlpha',.2,'MarkerEdgeAlpha',.2)


[X,Y,Z] = XMT(h,r,150*pi,linspace(0,1,50)*h);
[X,Y,Z] = OFS(X,Y,Z,.1);
scatter3(X,Y,Z,20,[114,146,184]./255,'filled','MarkerFaceAlpha',.9,'MarkerEdgeAlpha',.9)
scatter3(X,Y,Z,150,[114,146,184]./255,'filled','MarkerFaceAlpha',.2,'MarkerEdgeAlpha',.2)


%% 绘制星星 ================================================================
plot3(0,0,10.5,'p', 'MarkerSize',25,'MarkerFaceColor',[255,223,153]/255,'MarkerEdgeColor','none','LineWidth', 1);
starLightHdl = scatter3(0,0,10.5,8000,'o','MarkerFaceColor','w','MarkerEdgeColor','w','MarkerEdgeAlpha',0,'MarkerFaceAlpha', 0.1);

%% 绘制地面 ================================================================
[X,Y]=meshgrid(linspace(-6,6,60));
Z=cos(hypot(X,Y).*5)./2-2; [X,Y,Z] = OFS(X,Y,Z,.1);
scatter3(X,Y,Z,3,'o','filled','CData',[91,131,253]./255,...
    'MarkerFaceAlpha',.4,'MarkerEdgeColor','none');
%% 绘制雪花 ================================================================
snowXYZ1=rand(120,3);
snowXYZ1(:,1:2)=snowXYZ1(:,1:2).*16-8;
snowXYZ1(:,3)=snowXYZ1(:,3).*20;
snowXYZ2=rand(150,3);
snowXYZ2(:,1:2)=snowXYZ2(:,1:2).*16-8;
snowXYZ2(:,3)=snowXYZ2(:,3).*20;
snowHdl1=plot3(snowXYZ1(:,1),snowXYZ1(:,2),snowXYZ1(:,3),'*','Color',[.8,.8,.8]);
snowHdl2=plot3(snowXYZ2(:,1),snowXYZ2(:,2),snowXYZ2(:,3),'.','Color',[.6,.6,.6]);
%% 旋转图像、雪花飘落 =======================================================
for i=1:1e8
    starLightHdl.SizeData=8000+sin(i/5).*1600;
    snowXYZ1(:,3)=snowXYZ1(:,3)-.05;snowXYZ2(:,3)=snowXYZ2(:,3)-.005;
    snowXYZ1(snowXYZ1(:,3)<0,3)=snowXYZ1(snowXYZ1(:,3)<0,3)+20;
    snowXYZ2(snowXYZ2(:,3)<0,3)=snowXYZ2(snowXYZ2(:,3)<0,3)+20;
    snowHdl1.XData=snowXYZ1(:,1);snowHdl1.YData=snowXYZ1(:,2);snowHdl1.ZData=snowXYZ1(:,3);
    snowHdl2.XData=snowXYZ2(:,1);snowHdl2.YData=snowXYZ2(:,2);snowHdl2.ZData=snowXYZ2(:,3);
    view([i,33]);
    drawnow;pause(.05)
end
end  

祝各位准研究生们春风得意马蹄疾,早考完早一起快乐MATLAB~祝各位MATLABer圣诞快乐!文章来源地址https://www.toymoban.com/news/detail-769086.html

到了这里,关于MATLAB | 圣诞节快到了,一起画两款动态圣诞树吧~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 圣诞节教你如何用Html+JS+CSS绘制3D动画圣诞树

    上篇文章给大家提供了一个如何生成静态圣诞树的demo。但是那样还不够高级,如何高级起来,当然是3D立体带动画效果了。 先看效果图: 源码如下: 将源码复制保存到html中打开即可。源码都是些基本的知识,不过多讲解。

    2024年02月03日
    浏览(69)
  • 股市中的Santa Claus Rally (圣诞节行情)

    Santa Claus Rally 是指 12 月 25 日圣诞节前后股市的持续上涨这样一个现象。《股票交易员年鉴》的创始人 Yale Hirsch 于 1972 年创造了这个定义,他将当年最后五个交易日和次年前两个交易日的时间范围定义为反弹日期。 根据 CFRA Research 的发现,自 1945 年以来,SP 500 指数(标准普

    2024年02月03日
    浏览(44)
  • 圣诞节酷炫特效合集【含十几个HTML+CSS前端特效+34个桌面酷炫圣诞程序】

    ❤️源码获取:订阅后见文末 ❤️内容介绍:包含HTML+CSS等十几个圣诞特效;以及三十四个桌面酷炫圣诞树合集 ❤️订阅后所得如下: ❤️HTML圣诞+桌面圣诞程序效果如下: 下方展示代码仅举例其中几个 所有效果源码及文件订阅后找博主获取即可

    2024年02月04日
    浏览(50)
  • 叫ChatGPT用html+css+js写一个圣诞节代码,看看什么样子?

    最近ChatGPT这么火,那就让他给我写点代码吧。 如何注册一个账号,参考:注册ChatGPT详细指南 注册不了的小伙伴们,咱们评论区见,问一个最想问的问题,看到就给你回复! 我已经注册好了,下面直接开始白嫖代码! 给的例子十分简单,并且中文乱码,且没有声音和图片。

    2023年04月17日
    浏览(97)
  • 母亲节快到了,祝所有母亲节日快乐!Happy Mother‘s Day

    《游子吟》唐·孟郊 慈母手中线,游子身上衣。 临行密密缝,意恐迟迟归。 谁言寸草心,报得三春晖。 My kind mother has a needle and thread in her hand,Making new clothes for her son who is to travel far away. She is busy sewing closely before my leaving,Worried that I cannot come back for a long time. Who says that the h

    2024年02月04日
    浏览(40)
  • 舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物

    这不是学姐生日快到了,于是我学了一手使用Python来把学姐的照片生成为视频,到时候给她一个惊喜! 好了先不舔了,下面分享一下用python代码实现多张图片合成MP4视频为实例,做下详细代码讲解。 1、imageio模块 Python模块imageio是一个用于读取和写入图像及视频数据的库。它

    2023年04月09日
    浏览(36)
  • 【Python】中秋节快到了,这才是程序员该赏的“月亮”(3D+音频+源码)

    目录 导语​ 一、做月饼 二、赏“月” 1. 引言 2. 下载ursina库 3.实现思路 4.资源的获取 总结 送一个圆圆的饼,寄一个圆圆的请,献一颗圆圆的心,圆一个圆圆的梦,中秋节快乐!转眼之间,农历八月十五中秋节即将到来,又是一年中秋,作为一位Python爱好者,怎么能置之不理

    2024年02月08日
    浏览(37)
  • MATLAB | 一个贼简单的粒子圣诞树

    上一期圣诞树有些人说代码太复杂,这期来个贼简单的水晶球里的圣诞树: 这期就是非常简单的三个图形组合: 主体就是锥形螺旋线和中轴之间连线上取的一些散点: 这里将距离中心点的距离映射为余弦函数: 就是一个半透明的球:

    2024年02月04日
    浏览(91)
  • MATLAB | 一起来绘制有雪花飘落的圣诞树叭

    请尊重原创劳动成果 转载请注明本文链接 及文章作者:slandarer 圣诞节快到了(虽然还有十天),一起来用MATLAB画个简单圣诞树叭~树的整体构造参考大佬 Anselm ,同时一部分装饰代码参考了大佬 Hanchu Wang 。 代码几乎取消了全部的循环,因此至少需要17b之后的版本,仅存的循

    2024年02月03日
    浏览(55)
  • 程序员的浪漫—利用Matlab 实现圣诞树动态显示

            圣诞节是基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节,天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期,《圣经》并无记载。公元336年罗马教会开始在12月25日过此节。12月25日原是罗马帝国规定的太阳神诞辰。有人认为选择这天庆祝圣诞,是因为基督教

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包