MATLAB | 一起来绘制一款元旦特别款烟花叭~

新的一年就要到了,祝大家元旦快乐,新的一年里顺风顺水顺财神,文章投的都中,奖金基金kuku申请成功,今天带来一款完成度比较高的烟花代码,带字幕特效,为新的一年接风洗尘~:
在这里插入图片描述

文字都是可以换的,也可以更多句话,只需要修改STR元胞数组内的内容:

if nargin<1STR={'MATLABer','元旦快乐'};
end

改点字过年的时候还可以接着用哈哈哈哈。


完整代码

完整代码有点长,日后该代码如果有更新可以去我的gitee仓库进行查看。

function subtitleFireworks(STR)
% Copyright (c) 2023, Zhaoxu Liu / slandarer
if nargin<1STR={'MATLABer','元旦快乐'};
endfwSound=load('splat.mat');
% 循环构建文段矩阵
STRMX{length(STR)}=[];
STRMY{length(STR)}=[];
for i=1:length(STR)string=STR{i};CaptionMat=zeros(25*length(string),25);for j=1:length(string)CaptionMat(25*(j-1)+1:25*j,:)=getWordMatrix(string(j));end[XMesh,YMesh]=find(CaptionMat~=0);sizeSTRM=size(CaptionMat);STRMX{i}=(XMesh-sizeSTRM(1)/2)./12.5;STRMY{i}=(YMesh-sizeSTRM(2)/2)./12.5;
endfig=figure('units','normalized','position',[.1,.1,.5,.8],...'UserData',[98,121,32,115,108,97,110,100,97,114,101,114]);
axes('parent',fig,'NextPlot','add','Color',[0,0,0],...'DataAspectRatio',[1,1,1],'XLim',[-100,100],'YLim',[0,200],'Position',[0,0,1,1]);
disp(char(fig.UserData))
% 绘制一些静态装饰
if true
starX=rand(1,50).*200-100;starY=rand(1,50).*110+90;
scatter(starX,starY,40,'white','filled','MarkerEdgeColor','none','MarkerFaceAlpha',.1)
scatter(starX,starY,4,'white','filled','MarkerEdgeColor','none','MarkerFaceAlpha',.9)
for i=1:20skyscraper(5+i*10-110+2,rand([1,1])*20+30,[47,46,70]./255./4,[253,243,177]./255./4)skyscraper(5+i*10-110,rand([1,1])*25+15,[47,46,70]./255,[253,243,177]./255)
end
end%% ========================================================================
% 主循环
for i=length(STR)+1:99indSTRM=mod(i-1,length(STR)+2)+1;if length(STR)+1==indSTRM||length(STR)+2==indSTRMdrawFireworks()elsedrawWordMatrix(indSTRM)end
end
%% ========================================================================
% 一些静态绘制函数function skyscraper(X,Y,C1,C2)W=4.6;H=50;fill([X-W,X+W,X+W,X-W],[Y,Y,Y+H,Y+H]-H,C1)[XW,YW]=meshgrid([-1.9,1.9],linspace(.5,50-1.5,15));CMat=C2.*(rand([length(XW(:)),1])>.5);scatter(XW(:)+X,YW(:)+Y-H-1.5,35,'filled','CData',CMat,'Marker','s','MarkerEdgeColor','none')end
%% ========================================================================
% 一些动态绘制函数function drawWordMatrix(N)drawBullet(0,140,[1,1,1]);wordHdl1=scatter(STRMX{N},STRMY{N}+140,15,'filled','CData',[1,1,1],'Marker','s','MarkerEdgeColor','none','MarkerFaceAlpha',.5);wordHdl2=scatter(STRMX{N},STRMY{N}+140,15,'filled','CData',[1,1,1],'Marker','s','MarkerEdgeColor','none');set(gca,'Color',[1,1,1]./8);for ii=linspace(2,30,30)wordHdl1.XData=STRMX{N}.*(ii-1);wordHdl1.YData=STRMY{N}.*(ii-1)+140;wordHdl2.XData=STRMX{N}.*ii;wordHdl2.YData=STRMY{N}.*ii+140;set(gca,'Color',[1,1,1]./8*(1-ii/30));drawnow;pause(.05)enddelete(wordHdl1)delete(wordHdl2)endfunction drawBullet(X,Y,C)YY=linspace(0,-12,20);XX=sin(YY)./8;XX=XX-XX(1)+X;Alp=linspace(1,.01,20);Siz=linspace(45,8,20);bulletHdl=scatter(XX,YY,'filled','CData',C,'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');sound(fwSound.y(1:7200),fwSound.Fs/1.2)for ii=linspace(0,Y,30)YY=linspace(0,-12,20)+ii;XX=sin(linspace(0,-12,20)+ii/2)./8;XX=XX-XX(1)+X;bulletHdl.XData=XX;bulletHdl.YData=YY;drawnow;pause(.06)enddelete(bulletHdl)sound(fwSound.y(7201:10001),fwSound.Fs)endfunction drawFireworks(~,~)% Copyright (c) 2023, Zhaoxu Liu / slandarerYY=linspace(0,-12,20);XX=sin(YY)./8;XX=XX-XX(1);X=rand([3,1]).*200-100;Y=rand([3,1]).*80+90;C=rand(3,3)./2+.5;Alp=linspace(1,.01,20);Siz=linspace(45,8,20);bulletHdl1=scatter(XX+X(1),YY,'filled','CData',C(1,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');bulletHdl2=scatter(XX+X(2),YY,'filled','CData',C(2,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');bulletHdl3=scatter(XX+X(3),YY,'filled','CData',C(3,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');sound(fwSound.y(1:7200),fwSound.Fs/1.2)for ii=linspace(0,1,30)YY1=linspace(0,-12,20)+ii*Y(1);XX1=sin(linspace(0,-12,20)+ii*Y(1)/2)./8;XX1=XX1-XX1(1)+X(1);YY2=linspace(0,-12,20)+ii*Y(2);XX2=sin(linspace(0,-12,20)+ii*Y(2)/2)./8;XX2=XX2-XX2(1)+X(2);YY3=linspace(0,-12,20)+ii*Y(3);XX3=sin(linspace(0,-12,20)+ii*Y(3)/2)./8;XX3=XX3-XX3(1)+X(3);bulletHdl1.XData=XX1;bulletHdl1.YData=YY1;bulletHdl2.XData=XX2;bulletHdl2.YData=YY2;bulletHdl3.XData=XX3;bulletHdl3.YData=YY3;drawnow;pause(.06)enddelete(bulletHdl1);delete(bulletHdl2);delete(bulletHdl3)sound(fwSound.y(7201:10001),fwSound.Fs)T=rand([1,300]).*2.*pi;R=rand([1,300]).*1+1;XF=cos(T).*R;YF=sin(T).*R;K=linspace(1,2,10).';Alp=linspace(.01,.7,10).'.*ones(1,100);Alp=Alp(:);Siz=linspace(4,40,10).'.*ones(1,100);Siz=Siz(:);R2=(XF.*K).^2+(YF.*K).^2;XXF=XF.*K;YYF=YF.*K-R2./90;XXF1=XXF(:,1:100);XXF1=XXF1(:);YYF1=YYF(:,1:100);YYF1=YYF1(:);XXF2=XXF(:,101:200);XXF2=XXF2(:);YYF2=YYF(:,101:200);YYF2=YYF2(:);XXF3=XXF(:,201:300);XXF3=XXF3(:);YYF3=YYF(:,201:300);YYF3=YYF3(:);fireworksHdl1=scatter(XXF1+X(1),YYF1+Y(1),'filled','CData',C(1,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');fireworksHdl2=scatter(XXF2+X(2),YYF2+Y(2),'filled','CData',C(2,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');fireworksHdl3=scatter(XXF3+X(3),YYF3+Y(3),'filled','CData',C(3,:),'AlphaData',Alp,'SizeData',Siz,'MarkerFaceAlpha','flat');set(gca,'Color',(C(1,:)+C(1,:)+C(1,:))./30);for ii=linspace(2,20,30)XXF(1:end-1,:)=XXF(2:end,:);XXF(end,:)=XF.*ii;R2=(XF.*ii).^2+(YF.*ii).^2;YYF(1:end-1,:)=YYF(2:end,:);YYF(end,:)=YF*ii-R2./90;XXF1=XXF(:,1:100);XXF1=XXF1(:);YYF1=YYF(:,1:100);YYF1=YYF1(:);XXF2=XXF(:,101:200);XXF2=XXF2(:);YYF2=YYF(:,101:200);YYF2=YYF2(:);XXF3=XXF(:,201:300);XXF3=XXF3(:);YYF3=YYF(:,201:300);YYF3=YYF3(:);fireworksHdl1.XData=XXF1+X(1);fireworksHdl1.YData=YYF1+Y(1);fireworksHdl2.XData=XXF2+X(2);fireworksHdl2.YData=YYF2+Y(2);fireworksHdl3.XData=XXF3+X(3);fireworksHdl3.YData=YYF3+Y(3);set(gca,'Color',(C(1,:)+C(1,:)+C(1,:))./30*(1-ii/20));drawnow;pause(.02)enddelete(fireworksHdl1);delete(fireworksHdl2);delete(fireworksHdl3)end
%% ========================================================================% 文字矩阵生成函数function wordMatrix=getWordMatrix(CHAR)% Copyright (c) 2023, Zhaoxu Liu / slandarerfigGWM=figure('units','pixels','position',[20 20 160 160],...'Numbertitle','off','Color',[1 1 1],'resize','off',...'visible','off','menubar','none');axGWM=axes('Units','pixels','parent',figGWM,'Color',[1 1 1],...'Position',[0 0 160 160],'XLim',[0 16],'YLim',[0 16],...'XColor',[1 1 1],'YColor',[1 1 1],'NextPlot','add');text(axGWM,8,8.5,CHAR,'HorizontalAlignment','center','FontSize',120)saveas(figGWM,['.\',CHAR,'.png']);pic=imread(['.\',CHAR,'.png']);delete(['.\',CHAR,'.png']);delete(axGWM);set(figGWM,'Visible','on');close all[rowMax,colMax,~]=size(pic);picData=pic(:,:,1)<125;wordMatrix=zeros(25,25);% 统计每个像素内点数确定黑色还是白色for ii=1:25rowLim=round([ii-1,ii]./25.*rowMax);rowLim(rowLim==0)=1;for jj=1:25colLim=round([jj-1,jj]./25.*colMax);colLim(colLim==0)=1;wordMatrix(ii,jj)=sum(sum(picData(rowLim(1):rowLim(2),colLim(1):colLim(2))));endendwordMatrix(wordMatrix<10)=0;wordMatrix=wordMatrix';wordMatrix=wordMatrix(:,end:-1:1);end
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310817.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软推出iOS 版Copilot App 让你免费用GPT-4

微软几天前在Android 平台推出独立的Copilot App 后&#xff0c;很快地又推出了适用于iOS 和iPad 本版的Copilot App&#xff0c;现在已经于苹果的App Store 上架&#xff0c;让iPhone 和iPad 使用者也能快速接触到这款人工智慧助手&#xff0c;通过输入查询来获得由OpenAI 的G…

[LLM]大模型训练(三)--DeepSpeed-Train

安装DeepSpeed与集成 pip install deepspeed DeepSpeed与HuggingFace Transformers直接集成。使用者可以通过在模型训练命令中加入简单的 --deepspeed 标志和配置文件&#xff0c;来轻松加速模型训练。 编写DeepSpeed模型 DeepSpeed模型训练的核心是什么&#xff1f;它如何处…

B+树的插入删除

操作 插入 case2的原理,非叶子节点永远和最右边的最左边的节点的值相等。 case3:的基本原理 非叶子节点都是索引节点 底层的数据分裂之后 相当于向上方插入一个新的索引(你可以认为非叶子节点都是索引),反正第二层插入160 都要分裂,然后也需要再插入(因为索引部分不需要重…

【设计模式】状态模式

文章目录 引例状态模式理论状态模式代码优化结合享元模式并发问题解决 策略模式 VS 状态模式 引例 交通信号灯系统的设计与实现 方案一 传统设计方案 定义交通灯颜色的枚举 public enum LightColor { Green,Red,Yellow }交通灯类TrafficLight&#xff0c;处理颜色转换等业务…

关于HTTPS

目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…

基于COT控制的降压型DC-DC转换器设计(四)

恒定导通时间控制模式 基于纹波的恒定导通时间控制模式&#xff08;Ripple-Based Constant On-Time, RB-COT&#xff09; 电压模控制与电流模控制反馈电压 都要经过误差放大器后再和参考电压进行比较&#xff0c;这就使得电压的变化要通过一个补偿网络才能够作用到功率管上&am…

Sublime Text 4 中文汉化教程(Version: Build 4169)

Sublime Text 4汉化 1 知识小课堂1.1 sublim简介1.2 其他编辑器 2 安装过程2.1 安装Install Package Control2.2 Install Package2.3 安装工具包2.4 常用的插件2.5 安装中文包 1 知识小课堂 1.1 sublim简介 Sublime是一款代码编辑器&#xff0c;致力于为开发人员提供快速、高…

【网络奇遇记】揭秘计算机网络的性能指标:时延带宽积|往返时间|利用率|丢包率

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;上期回顾一. 时延带宽积二. 往返时间三. 利用率四. 丢包率&#x1f4dd;结语 &#x1…

Rust开发⼲货集(1)--迭代器与消费器

本内容是对 Rust开发干货集[1] 的实践与扩展. iter() 不转移所有权 先简单解释下什么叫"转移所有权": 在 Rust 中&#xff0c;"转移所有权"&#xff08;Ownership Transfer&#xff09;是一种核心概念&#xff0c;它涉及变量和数据的所有权从一个实体转移…

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88682033 一&#xff0c;概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法&#xff0c;用于预测时间序列数据的趋势和未来值。 在使用这种方法之前&#xff0c;需要将时间序…

【SpringCloud笔记】(12)分布式请求链路跟踪之Sleuth

Sleuth 背景 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&#xff0c;链路中的任何一环出现高延时或错误都会引起整个请求最后的…

概率论基础复习题

一、填空题 二、选择题 答案&#xff1a;B 答案&#xff1a;C 答案&#xff1a;C 答案&#xff1a;D。统计量不含任何未知参数。 答案&#xff1a;A 答案&#xff1a;C 样本均值是总体均值的无偏估计&#xff1b;样本方差是总体方差的无偏估计。 答案&#xff1a;B。统计值是一…