JAVA烟花原理

2023-11-12

java烟花原理

0.缘由

两天前无聊玩了下蜘蛛纸牌,发现最后胜利时的烟花效果挺漂亮的。琢磨Java能不能弄出来类似的效果,上网搜了一下,整合资料(基本全是抄的)之后自己写了一份。重点讲原理,源码放文末。上一个效果图。                                                                                                           

1.概述

其实烟花说白了就是放射线,先确定爆炸中心点(Xx,Xy),然后在爆炸区随机产生一些爆炸截止点(Xx+Ex,Xy+Ey),之后就是
多线程划线问题了,再加上色彩,弯曲就很像日常生活的烟花了。

2.基本属性

上图就是烟花类的全部属性
width,height , G 分别理解为宽,高,重力,属于环境属性
(Xx,Xy)是爆炸中心点,(Ex[ ],Ey[ ])是一组截止点距离中心点的增量, x和y表示爆炸过程的增量
energy表示爆炸的威力,简单说就是炸多远;patch表示炸成多少块碎片
t 和 length 是进度属性, 比如中心点到截止点之间要画 length个点,现在画了t个
红绿蓝三个是颜色属性,在色彩小节会讲到

3.关于色彩

不仅每一个烟花之间的颜色是不一样的,而且同一个烟花在炸的过程中,它会变颜色。在程序中,通过随机数+RGB来实现
具体看代码
在爆炸的过程中,之前定义的Red,Green和Blue 在【-32,+32】的区间内随机移动,每画一个点,这三个颜色变量的值都可能发生小幅度的变化(±32),然后由这三个变量生成的Color就是渐变的了,这就是实现爆炸过程中变色的主要代码

4.关于消失

烟花爆炸完之后,又得是黑夜。所以我们得想办法让他消失。本程序的做法是黑线覆画。彩色线过一遍,黑色线再覆盖掉,和黑夜一样色,所以就是所谓的消失。但是速度是一个问题。如果黑线和彩线一样快,那么我们只能看到一个彩色点。所以我们把黑色线的速度调到彩色线的两倍,然后彩色线画一半才开始画黑色线。举个简单的例子,中心点到截止点要画100个彩色点
画前50个彩色点时,不画黑色点
画第51个彩色点时,画第1个和第2个黑色点覆盖第1个和第2个彩色点。(生成和消失速度比 1:2)
画第52个彩色点时,画第3个和第4个黑色点覆盖第3个和第4个彩色点。
。。。。以此类推
这样当画到第100个彩色点的时候,也刚好消失到了第100个彩色点。
再不理解就是,你速度是别人两倍,让人先跑一半你再跑,最后一起到终点。

5.关于重力

如果不考虑重力,那么烟花过程就是真真正正的放射线,是直线的,那样不符合实际,也不好看。所以引进了G,这也是为什么上面的图片的增量Ey【i】后面要减掉一些的原因。上图的S表示完成了length个点的几分之几,可以理解为路程,根据物理学,S=vt-1/2gt^2,可以看出跟时间的平方有关系,而又因为水平速度不变,所以其实跟路程的平方有关系,所以那里就是S的平方。物理学太久也忘记了,反正就是要考虑重力,比原来的截止点的y要低一些就可以了。原来的方向是直的,实际要有一点弧度。

6.源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA烟花原理 的相关文章

随机推荐

  • exec族函数配合fork使用(linux系统编程)

    execl 函数配合fork 函数 在执行A程序的过程中去执行B程序 代码B 用来改文件中的数值 include
  • Google签名证书和base64密钥

    keystore重点说明 1 打包aab时 需要自己创建当前应用的keystore 这个是开发者的应用的keystore 以后上传这个应用都使用这个keystore 2 Google的签名证书 作用是当应用上传Google商店后 Googl
  • 运行时链接

    基本概念 运行时链接 是在程序运行时 而非编译时或加载时 将程序代码与其依赖的库代码进行链接的过程 动态链接在程序启动时或实际运行过程中通过API函数完成 这种方式的主要优点是它允许程序在运行时加载和卸载不同的库模块 从而实现更高的模块化和
  • 敏捷开发“松结对编程”实践之三:共同估算篇(大型研发团队,学习型团队,139团队,师徒制度,敏捷设计,估算扑克,扑克牌估算)

    转载自 http blog csdn net cheny com article details 6587277 本文是 松结对编程 系列的第三篇 之一 之二 之三 之四 之五 之六 之七 之八 此系列之九及之后文章请见栏目总目录 估算是经
  • 使用FFMPEG将WebM转为MP4或MKV

    PS5 自带的录像功能导出的格式是WebM 同时视频是HDR默认60帧 我们有时需要转成其他格式保存 下面两个命令可以将其转成mkv或者mp4格式 ffmpeg i test webm vf zscale t linear npl 100
  • C++基础之const

    C 中什么是常量 常量 在程序运行期间不能发生改变的变量 常量不限制类型 但是在定义之后值不可修改 c 中定义常量有两种方法 使用宏定义 define预处理器 来自C语言 define DEF WINDOW WIDTH 720 使用cons
  • java简单毕设_[手把手教你做毕设](专栏介绍)

    引子 我并没有写过毕设相关的博文 但是每周都有不少人咨询我毕设相关的系统开发问题 OK 好像很久很久以前 写过一个 JSP Servlet培训班作业管理系统 说实话写得一般 确实一般 不是谦虚 以致于心有愧欠 感觉貌似大概可能也许差不多 误
  • 55个mes项目解决方案及案例_我调查了 20 个 MES 项目实施情况,发现了这些

    本文首发于 智能制造社区 作者Raylan 昨天智能制造社区的 Raylan 同学设计了个简单的问卷 想分析下 MES 项目的执行情况 所以就在我们社区微信群里简单做了抽样 此次调研是匿名调研 问卷接收数量大约在44 63之间 问卷返回数量
  • 从0开始写Vue项目-Vue实现用户数据批量上传和数据导出

    从0开始写Vue项目 环境和项目搭建 慕言要努力的博客 CSDN博客 从0开始写Vue项目 Vue2集成Element ui和后台主体框架搭建 慕言要努力的博客 CSDN博客 从0开始写Vue项目 Vue页面主体布局和登录 注册页面 慕言要
  • IDEA常用快捷键(Windows)

    Ctrl S 保存文件 Ctrl C 复制 Ctrl X 剪切 Ctrl V 粘贴 Ctrl Z 撤销 Ctrl Y 重做 Ctrl F 查找 Ctrl Shift F 全局查找 Ctrl R 替换 Ctrl D 复制当前行或选中区域到下一
  • 编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number是奇数,collatz()就打印

    要求 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 并返回该值 如果number是奇数 collatz 就打印并返回3 number 1 使用软件 vsco
  • 深度学习 情感分析_使用深度学习进行情感分析

    深度学习 情感分析 介绍 Introduction The growth of the internet due to social networks such as Facebook Twitter Linkedin Instagram
  • Mule的学习(一、mule的认知)

    参考 https blog csdn net a victory article details 70216772 https blog csdn net lishehe article details 33394895 https www
  • U盘读写速度优化

    从android设备上向U盘上传文件 时间比较长 优化后 时间大幅度缩短 经过几次测试 8k的缓存可以达到传输速度和容错率的平衡点 超过了太容易出错 低于8k传输速度会下降 byte buffer new byte 1024 8 使用的第三
  • MMEditing如何添加自己的新模型

    如何使用商汤的框架MMEditing添加一个自己的新模型嘞 因为自己平时做超分辨率 所以这里用BasicVSR的改动作为例子 一般需要在MMEditing中添加三个文件 配置 backbones以及restores BasicSR原始的地址
  • LeetCode-312.戳气球、动态规划

    有 n 个气球 编号为0 到 n 1 每个气球上都标有一个数字 这些数字存在数组 nums 中 现在要求你戳破所有的气球 如果你戳破气球 i 就可以获得 nums left nums i nums right 个硬币 这里的 left 和
  • C语言文件包含

    一个C语言程序由若干源程序文件组成 而一个源文件还可以将另一个源文件的全部内容包含进来 即将指定的源文件包含在当前文件中 例如 下有两个源文件file1 c和file2 c file1 c int max int x int y int z
  • 因易用性导致的TongWeb使用误区

    误区一 使用TongWeb企业版本 即按照 TongWeb7企业版用户手册 pdf 手册操作 安装好TongWeb后doc目录下有手册 TongWeb手册的正确观看顺序 1 最先看 TongWeb7快速使用手册 pdf 了解基本的安装 使用
  • 【基于用户的】协同过滤推荐算法(UserCF算法的实现)

    协同过滤算法在推荐算法领域应用十分广泛 主要有基于用户 UserCF 和基于物品 ItemCF 两种不同的类型 基于用户的推荐算法 它是一种发现兴趣相似的用户的算法 假如你正在建设的是一个学习资源共享平台 你的用户群体有着大致稳定的专业与相
  • JAVA烟花原理

    java烟花原理 0 缘由 两天前无聊玩了下蜘蛛纸牌 发现最后胜利时的烟花效果挺漂亮的 琢磨Java能不能弄出来类似的效果 上网搜了一下 整合资料 基本全是抄的 之后自己写了一份 重点讲原理 源码放文末 上一个效果图 1 概述 其实烟花说白