MATLAB程序演示烟花燃放过程

2022-07-15 09:15:15   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《MATLAB程序演示烟花燃放过程》,欢迎阅读!
燃放,演示,烟花,过程,程序

MATLAB程序演示烟花燃放过程

烟花(礼花)的朵朵绽放给夜空带来炫彩,瞬间绚丽至极,迸射出璀璨夺目的光彩。只是还来不及在脑海中印上花魂,她已昙花一现般,烟花(礼花)朵朵绽放,瞬间绚丽至极,迸射出璀璨夺目的光彩。只是还来不及在脑海中印上花魂,她已昙花一现般的消逝了。多少人痴迷于烟花的美,痴迷于她飘忽不定的幻影。利用MATLAB程序演示烟花的美,虽然她不如现实那样逼真,但一样会吸引人。

附源程序:

function firework % 烟花烟花满天飞

% CopyRightxiezhh(谢中华) % 2011.6.25

OldHandle = findobj( 'Type', 'figure', 'Tag', 'FireWork' ) ; if ishandle(OldHandle) close(OldHandle) ; end

% 图形窗口初始化

fig = 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,'linestyle', 'none',... 'marker','.',... 'markersize',18,...

'MarkerEdgeColor',[1 1 1],... 'MarkerFaceColor',[1 1 1],... 'EraseMode' , 'xor'); % 设置坐标系显示属性 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,event) 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,'linestyle', 'none',...


'marker','h',... 'markersize',12,...

'MarkerEdgeColor',[1 1 1],... 'MarkerFaceColor',[1 1 1],... 'EraseMode' , 'xor');

setappdata(gcf,'HandleParticle',h); start(timerB); end end

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

%-------------------------------------------------------------------------- function TimerFcnB(timerB,event) 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


本文来源:https://www.dywdw.cn/35dbb362cdbff121dd36a32d7375a417866fc192.html

相关推荐
推荐阅读