楼主: Lisrelchen
2439 0

[Case Study]利用MATLAB燃放烟花(礼花) [推广有奖]

  • 0关注
  • 62粉丝

VIP

已卖:4194份资源

院士

67%

还不是VIP/贵宾

-

TA的文库  其他...

Bayesian NewOccidental

Spatial Data Analysis

东西方数据挖掘

威望
0
论坛币
50288 个
通用积分
83.6306
学术水平
253 点
热心指数
300 点
信用等级
208 点
经验
41518 点
帖子
3256
精华
14
在线时间
766 小时
注册时间
2006-5-4
最后登录
2022-11-6

楼主
Lisrelchen 发表于 2015-3-18 03:44:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. function firework
  2. % 烟花烟花满天飞
  3. % CopyRight:xiezhh(谢中华)
  4. % 2011.6.25

  5. OldHandle = findobj( 'Type', 'figure', 'Tag', 'FireWork' ) ;
  6. if ishandle(OldHandle)
  7.     close(OldHandle) ;
  8. end
  9. % 图形窗口初始化
  10. fig = figure('units','normalized','position',[0.1 0.1 0.8 0.8],...
  11.     'menubar','none','name','烟花满天飞(谢中华制作)',...
  12.     'numbertitle','off','color',[0 0 0],'tag','FireWork');
  13. % 烟花炸开前的初始位置
  14. h0 = line(0,0,0,'marker','.',...
  15.     'markersize',18,...
  16.     'MarkerEdgeColor',[1 1 1],...
  17.     'MarkerFaceColor',[1 1 1],...
  18.     'EraseMode' , 'xor',...
  19.     'color',[0 0 0]);
  20. % 设置坐标系显示属性
  21. axis equal
  22. axis([-50 50 -50 50 0 100])
  23. axis off
  24. view(-42,22)

  25. % 设置参数
  26. rate = 1:-0.01:0;  % 颜色衰减率
  27. v0 = 45;  % 烟花头初始速度
  28. g = -9.8;   % 重力加速度
  29. usedtime = -v0/g;  % 烟花头爆炸前所经历时间
  30. zs = v0*usedtime+0.5*g*usedtime^2;  %烟花头爆炸前达到的最高高度

  31. theta = rand(250,1)*2*pi;  % 各粒子速度的方位角
  32. phi =  rand(250,1)*2*pi-pi;  % 各粒子速度的仰角
  33. age = 20;  % 粒子生存期
  34. % 常用颜色矩阵
  35. colormat = [1.0  0.5  0.5
  36.     1.0  0.75  0.5
  37.     1.0  1.0  0.5
  38.     0.75  1.0  0.5
  39.     0.5  1.0  0.5
  40.     0.5  1.0  0.75
  41.     0.5  1.0  1.0
  42.     0.5  0.75  1.0
  43.     0.5  0.5  1.0
  44.     0.75  0.5  1.0
  45.     1.0  0.5  1.0
  46.     1.0  0.5  0.75];
  47. % 随机产生各粒子对应的颜色序号
  48. colorid = randsample(12,250,true);
  49. % 粒子对应的颜色矩阵
  50. colormat = colormat(colorid,:);
  51. % 粒子颜色与背景色(夜色)的距离
  52. colordist = sqrt(sum(colormat.^2,2));
  53. v1 = 20;  % 粒子的初始速度
  54. k = 1;   % 颜色衰减率初始序号

  55. timerA = timer('TimerFcn',@TimerFcnA,...
  56.     'executionmode','fixedspacing','Period',0.001);
  57. start(timerA);
  58. h = getappdata(gcf,'HandleParticle');
  59. timerB = timer('TimerFcn',{@TimerFcnB},...
  60.     'executionmode','fixedspacing','period',0.001);

  61. %--------------------------------------------------------------------------
  62. %  定时器回调函数(烟花头)
  63. %--------------------------------------------------------------------------
  64. function TimerFcnA(timerA,event)
  65. ta = get(timerA,'TasksExecuted')*0.1;
  66. if ta <= usedtime
  67.     z = v0*ta+0.5*g*ta^2;
  68.     set(h0,'zdata',z,...
  69.         'MarkerEdgeColor',[1 1 1],...
  70.         'MarkerFaceColor',[1 1 1])
  71.     drawnow
  72.     %pause(0.01)
  73. else
  74.     delete(h0)
  75.     stop(timerA);
  76.     x0 = zeros(2,250);
  77.     y0 = zeros(2,250);
  78.     z0 = zs*ones(2,250);
  79.     h = line(x0,y0,z0,'marker','h',...
  80.         'markersize',12,...
  81.         'MarkerEdgeColor',[1 1 1],...
  82.         'MarkerFaceColor',[1 1 1],...
  83.         'EraseMode' , 'xor',...
  84.         'color',[0 0 0]);
  85.     setappdata(gcf,'HandleParticle',h);
  86.     start(timerB);
  87. end

  88. end
  89. %--------------------------------------------------------------------------
  90. %  定时器回调函数(粒子)
  91. %--------------------------------------------------------------------------
  92. function TimerFcnB(timerB,event)
  93. tb = get(timerB,'TasksExecuted')*0.15;
  94. if age>0 && any(colordist>=0.05)
  95.     colormat = colormat*rate(k);
  96.     colordist = sqrt(sum(colormat.^2,2));
  97.     for i = 1:250
  98.         xi = v1*cos(phi(i))*cos(theta(i))*tb;
  99.         yi = v1*cos(phi(i))*sin(theta(i))*tb;
  100.         zi = zs+v1*sin(phi(i))*tb+0.5*g*tb^2;
  101.         set(h(i),'XData',xi,'YData',yi,'ZData',zi,...
  102.             'MarkerEdgeColor',colormat(i,:),...
  103.             'MarkerFaceColor',colormat(i,:))
  104.     end
  105.     drawnow
  106.     age = age-0.1;
  107.     k = k+1;
  108. else
  109.     stop(timerB);
  110.     delete(h)
  111. end

  112. end
  113. %-------------------
  114. end
  115. 复制代码
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Case study MATLAB matla study atlab firework function position figure 坐标系

本帖被以下文库推荐

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-7 04:35