基于 Matlab模拟烟花满天飞附完整代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

基于 Matlab模拟烟花满天飞​

⛄ 完整代码

function firework

% 烟花烟花满天飞

OldHandle = findobj( 'Type', 'figure', 'Tag', 'FireWork' ) ;

if ishandle(OldHandle)

 close(OldHandle) ;

end

% 图形窗口初始化

figure('units','normalized','position',[0.1 0.1 0.8 0.8],...

'menubar','none','name','烟花满天飞',...

'numbertitle','off','color',[0 0 0],'tag','FireWork');

% 烟花炸开前的初始位置

h0 = line(0,0,0,'marker','.',...

'markersize',18,...

'MarkerEdgeColor',[1 1 1],...

'MarkerFaceColor',[1 1 1],...

'color',[0 0 0]);

% 设置坐标系显示属性

axis equal

axis([-50 50 -50 50 0 100])

axis off

view(-42,22)

% 设置参数

rate = 1:-0.01:0;% 颜色衰减率

v0 = 45;% 烟花头初始速度

g = -9.8;% 重力加速度

usedtime = -v0/g;% 烟花头爆炸前所经历时间

zs = v0*usedtime+0.5*g*usedtime^2;%烟花头爆炸前达到的最高高度

theta = rand(250,1)*2*pi;% 各粒子速度的方位角

phi =rand(250,1)*2*pi-pi;% 各粒子速度的仰角

age = 20;% 粒子生存期

% 常用颜色矩阵

colormat = [1.0 0.5 0.5

 1.0 0.75 0.5

 1.0 1.0 0.5

 0.75 1.0 0.5

 0.5 1.0 0.5

 0.5 1.0 0.75

 0.5 1.0 1.0

 0.5 0.75 1.0

 0.5 0.5 1.0

 0.75 0.5 1.0

 1.0 0.5 1.0

 1.0 0.5 0.75];

% 随机产生各粒子对应的颜色序号

colorid = randsample(12,250,true);

% 粒子对应的颜色矩阵

colormat = colormat(colorid,:);

% 粒子颜色与背景色(夜色)的距离

colordist = sqrt(sum(colormat.^2,2));

v1 = 20; % 粒子的初始速度

k = 1; % 颜色衰减率初始序号

timerA = timer('TimerFcn',@TimerFcnA,...

 'executionmode','fixedspacing','Period',0.001);

start(timerA);

h = getappdata(gcf,'HandleParticle');

timerB = timer('TimerFcn',{@TimerFcnB},...

 'executionmode','fixedspacing','period',0.001);

%--------------------------------------------------------------------------

%  定时器回调函数(烟花头)

%--------------------------------------------------------------------------

function TimerFcnA(timerA,~)

ta = get(timerA,'TasksExecuted')*0.1;

if ta <= usedtime

  z = v0*ta+0.5*g*ta^2;

  set(h0,'zdata',z,...

  'MarkerEdgeColor',[1 1 1],...

 'MarkerFaceColor',[1 1 1])

  drawnow

  %pause(0.01)

else

 delete(h0)

 stop(timerA);

 x0 = zeros(2,250);

 y0 = zeros(2,250);

 z0 = zs*ones(2,250);

 h = line(x0,y0,z0,'marker','h',...

'markersize',12,...

'MarkerEdgeColor',[1 1 1],...

'MarkerFaceColor',[1 1 1],...

'color',[0 0 0]);

setappdata(gcf,'HandleParticle',h);

start(timerB);

end

end

%--------------------------------------------------------------------------

%  定时器回调函数(粒子)

%--------------------------------------------------------------------------

function TimerFcnB(timerB,~)

tb = get(timerB,'TasksExecuted')*0.15;

if age>0 && any(colordist>=0.05)

 colormat = colormat*rate(k);

 colordist = sqrt(sum(colormat.^2,2));

 for i = 1:250

xi = v1*cos(phi(i))*cos(theta(i))*tb;

yi = v1*cos(phi(i))*sin(theta(i))*tb;

zi = zs+v1*sin(phi(i))*tb+0.5*g*tb^2;

set(h(i),'XData',xi,'YData',yi,'ZData',zi,...

'MarkerEdgeColor',colormat(i,:),...

'MarkerFaceColor',colormat(i,:))

 end

 drawnow

 age = age-0.1;

 k = k+1;

else

 stop(timerB);

 delete(h)

end

end

%-------------------

end

⛄ 运行结果

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值