在好例子网,分享、交流、成长!
您当前所在位置:首页MATLAB 开发实例MATLAB图形界面 → MATLAB生成烟花图案

MATLAB生成烟花图案

MATLAB图形界面

下载此实例
  • 开发语言:MATLAB
  • 实例大小:2.88KB
  • 下载次数:1
  • 浏览次数:15
  • 发布时间:2020-11-08
  • 实例类别:MATLAB图形界面
  • 发 布 人:DavisKING
  • 所需积分:4
 相关标签: MATLAB 烟花效果

实例介绍

【实例简介】matlab编写M文件生成烟花效果
【实例截图】
from clipboard
【核心代码】
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]);
hold on;
h = scatter3(0,0,0,60,'k','filled','Marker','h','Visible','off');
% 设置坐标系显示属性
axis equal;
axis([-50 50 -50 50 0 120]);
axis off;
view(-42,22);
% 设置参数
v0 = 45;  % 烟花头初始速度
g = -9.8;   % 重力加速度
usedtime = -v0/g - 0.8;  % 烟花头爆炸前所经历时间
zs = v0*usedtime 0.5*g*usedtime^2;  %烟花头爆炸前达到的最高高度
rng(1);
theta = rand(500,1)*2*pi;  % 各粒子速度的方位角
phi =  rand(500,1)*2*pi-pi;  % 各粒子速度的仰角
v1 = 20;  % 粒子的初始速度
xi = v1*cos(phi).*cos(theta); % 各粒子x方向的速度
yi = v1*cos(phi).*sin(theta); % 各粒子y方向的速度
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,500,true);
% 粒子对应的颜色矩阵
colormat0 = colormat(colorid,:);
% 粒子颜色与背景色(夜色)的距离
colordist = sqrt(mean(sum(colormat0.^2,2)));
rate = 0.25;  % 颜色随时间的衰减率
timerA = timer('TimerFcn',@TimerFcnA,...
    'executionmode','fixedspacing','Period',0.1);
start(timerA);
timerB = timer('TimerFcn',{@TimerFcnB},...
    'executionmode','fixedspacing','period',0.1);
%--------------------------------------------------------------------------
%  定时器回调函数(烟花头)
%--------------------------------------------------------------------------
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);
    set(h,'Visible','on');
    start(timerB);
end
end
%--------------------------------------------------------------------------
%  定时器回调函数(粒子)
%--------------------------------------------------------------------------
function TimerFcnB(timerB,~)
tb = get(timerB,'TasksExecuted')*0.1;
if age>0 && colordist>=0.02
    colormat = colormat0*(1-rate*tb);
    colordist = sqrt(mean(sum(colormat.^2,2)));
    zi = zs v1*sin(phi)*tb 0.5*g*tb^2;
    set(h,'XData',xi*tb,'YData',yi*tb,'ZData',zi,'CData',colormat);
    drawnow;
    age = age-0.1;
else
    stop(timerB);
    delete(h);
end
end
%-------------------

标签: MATLAB 烟花效果

实例下载地址

MATLAB生成烟花图案

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警