matlab绘制烟花,[原创]利用MATLAB燃放烟花(礼花)
function firework
% 煙花煙花滿天飛
% CopyRight:xiezhh(謝中華)
% 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,'marker','.',...
'markersize',18,...
'MarkerEdgeColor',[1 1 1],...
'MarkerFaceColor',[1 1 1],...
'EraseMode' , 'xor',...
'color',[0 0 0]);
% 設(shè)置坐標(biāo)系顯示屬性
axis equal
axis([-50 50 -50 50 0 100])
axis off
view(-42,22)
% 設(shè)置參數(shù)
rate = 1:-0.01:0;??% 顏色衰減率
v0 = 45;??% 煙花頭初始速度
g = -9.8;? ?% 重力加速度
usedtime = -v0/g;??% 煙花頭爆炸前所經(jīng)歷時間
zs = v0*usedtime+0.5*g*usedtime^2;??%煙花頭爆炸前達(dá)到的最高高度
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];
% 隨機(jī)產(chǎn)生各粒子對應(yīng)的顏色序號
colorid = randsample(12,250,true);
% 粒子對應(yīng)的顏色矩陣
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);
%--------------------------------------------------------------------------
%??定時器回調(diào)函數(shù)(煙花頭)
%--------------------------------------------------------------------------
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,'marker','h',...
'markersize',12,...
'MarkerEdgeColor',[1 1 1],...
'MarkerFaceColor',[1 1 1],...
'EraseMode' , 'xor',...
'color',[0 0 0]);
setappdata(gcf,'HandleParticle',h);
start(timerB);
end
end
%--------------------------------------------------------------------------
%??定時器回調(diào)函數(shù)(粒子)
%--------------------------------------------------------------------------
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
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的matlab绘制烟花,[原创]利用MATLAB燃放烟花(礼花)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 内置对象
- 下一篇: 中断扫描方式子程序c语言,单片机原理及应