以下是一个用java演示的产生图像烟花的算法,可以用来研究以下相关的东西。希望对有兴趣的朋友有用。

import   java.applet.AudioClip;
import   java.awt.*;
import   java.awt.image.MemoryImageSource;
import   java.util.Random;

public   class   jhanabi   extends   Applet
implements   Runnable
{

//   类成员变量定义域开始

private   int   m_nAppX;
private   int   m_nAppY;
private   int   m_centerX;
private   int   m_centerY;
private   int   m_mouseX;
private   int   m_mouseY;
private   int   m_sleepTime;
private   boolean   isError;
private   boolean   m_isPaintFinished;
boolean   isRunning;
boolean   isInitialized;
Thread   runner;
int   pix0[];
MemoryImageSource   offImage;
Image   dbImg;
int   pixls;
int   pixls2;
Random   rand;
int   bits;
double   bit_px[];
double   bit_py[];
double   bit_vx[];
double   bit_vy[];
int   bit_sx[];
int   bit_sy[];
int   bit_l[];
int   bit_f[];
int   bit_p[];
int   bit_c[];
int   bit_max;
int   bit_sound;
int   ru;
int   rv;
AudioClip   sound1;
AudioClip   sound2;

//   类成员变量定义域结束   <   初始化过程祥见构造方法   >

public   jhanabi//   构造方法   (如有必要,请手工调整该方法)
{
m_mouseX   =   0;
m_mouseY   =   0;
m_sleepTime   =   5;
isError   =   false;
isInitialized   =   false;
rand   =   new   Random;
bits   =   10000;
bit_px   =   new   double[bits];
bit_py   =   new   double[bits];
bit_vx   =   new   double[bits];
bit_vy   =   new   double[bits];
bit_sx   =   new   int[bits];
bit_sy   =   new   int[bits];
bit_l   =   new   int[bits];
bit_f   =   new   int[bits];
bit_p   =   new   int[bits];
bit_c   =   new   int[bits];
ru   =   50;
rv   =   50;
}//   jhanabi   结束
//构造方法结束

public   void   init
{
String   s   =   getParameter( "para_bits ");
if(s   !=   null)
bits   =   Integer.parseInt(s);
s   =   getParameter( "para_max ");
if(s   !=   null)
bit_max   =   Integer.parseInt(s);
s   =   getParameter( "para_blendx ");
if(s   !=   null)
ru   =   Integer.parseInt(s);
s   =   getParameter( "para_blendy ");
if(s   !=   null)
rv   =   Integer.parseInt(s);
s   =   getParameter( "para_sound ");
if(s   !=   null)
bit_sound   =   Integer.parseInt(s);
m_nAppX   =   size.width;
m_nAppY   =   size.height;
m_centerX   =   m_nAppX   /   2;
m_centerY   =   m_nAppY   /   2;
m_mouseX   =   m_centerX;
m_mouseY   =   m_centerY;
resize(m_nAppX,   m_nAppY);
pixls   =   m_nAppX   *   m_nAppY;
pixls2   =   pixls   -   m_nAppX   *   2;
pix0   =   new   int[pixls];
offImage   =   new   MemoryImageSource(m_nAppX,   m_nAppY,   pix0,   0,   m_nAppX);
offImage.setAnimated(true);
dbImg   =   createImage(offImage);
for(int   i   =   0;   i   <   pixls;   i++)
pix0[i]   =   0xff000000;

sound1   =   getAudioClip(getDocumentBase,   "firework.au ");
sound2   =   getAudioClip(getDocumentBase,   "syu.au ");
for(int   j   =   0;   j   <   bits;   j++)
bit_f[j]   =   0;

isInitialized   =   true;
start;
}//init   结束

public   void   run
{
while(!isInitialized)   
try
{
Thread.sleep(200L);
}
catch(InterruptedException   interruptedexception)   {   }

do
{
for(int   j   =   0;   j   <   pixls2;   j++)
{
int   k   =   pix0[j];
int   l   =   pix0[j   +   1];
int   i1   =   pix0[j   +   m_nAppX];
int   j1   =   pix0[j   +   m_nAppX   +   1];
int   i   =   (k   &   0xff0000)   > >   16;
int   k1   =   ((((l   &   0xff0000)   > >   16)   -   i)   *   ru   > >   8)   +   i;
i   =   (k   &   0xff00)   > >   8;
int   l1   =   ((((l   &   0xff00)   > >   8)   -   i)   *   ru   > >   8)   +   i;
i   =   k   &   0xff;
int   i2   =   (((l   &   0xff)   -   i)   *   ru   > >   8)   +   i;
i   =   (i1   &   0xff0000)   > >   16;
int   j2   =   ((((j1   &   0xff0000)   > >   16)   -   i)   *   ru   > >   8)   +   i;
i   =   (i1   &   0xff00)   > >   8;
int   k2   =   ((((j1   &   0xff00)   > >   8)   -   i)   *   ru   > >   8)   +   i;
i   =   i1   &   0xff;
int   l2   =   (((j1   &   0xff)   -   i)   *   ru   > >   8)   +   i;
int   i3   =   ((j2   -   k1)   *   rv   > >   8)   +   k1;
int   j3   =   ((k2   -   l1)   *   rv   > >   8)   +   l1;
int   k3   =   ((l2   -   i2)   *   rv   > >   8)   +   i2;
pix0[j]   =   i3   < <   16   |   j3   < <   8   |   k3   |   0xff000000;
}//for   结束

rend;
offImage.newPixels(0,   0,   m_nAppX,   m_nAppY);
try
{
Thread.sleep(m_sleepTime);
}
catch(InterruptedException   interruptedexception1)   {   }
}//   do   结束

while(true);
}//run   结束

public   void   update(Graphics   g)
{
paint(g);
}

public   void   paint(Graphics   g)
{
g.drawImage(dbImg,   0,   0,   this);
}

public   void   start
{
if(isError)
return;
isRunning   =   true;
if(runner   ==   null)
{
runner   =   new   Thread(this);
runner.start;
}
}

public   void   stop
{
if(runner   !=   null)
{
runner.stop;
runner   =   null;
}
}

public   boolean   mouseMove(Event   event,   int   i,   int   j)
{
m_mouseX   =   i;
m_mouseY   =   j;
return   true;
}

public   boolean   mouseDown(Event   event,   int   i,   int   j)
{
m_mouseX   =   i;
m_mouseY   =   j;
int   k   =   (int)(rand.nextDouble   *   256D);
int   l   =   (int)(rand.nextDouble   *   256D);
int   i1   =   (int)(rand.nextDouble   *   256D);
int   j1   =   k   < <   16   |   l   < <   8   |   i1   |   0xff000000;
int   k1   =   0;
for(int   l1   =   0;   l1   <   bits;   l1++)
{
if(bit_f[l1]   !=   0)
continue;
bit_px[l1]   =   m_mouseX;
bit_py[l1]   =   m_mouseY;
double   d   =   rand.nextDouble   *   6.2800000000000002D;
double   d1   =   rand.nextDouble;
bit_vx[l1]   =   Math.sin(d)   *   d1;
bit_vy[l1]   =   Math.cos(d)   *   d1;
bit_l[l1]   =   (int)(rand.nextDouble   *   100D)   +   100;
bit_p[l1]   =   (int)(rand.nextDouble   *   3D);
bit_c[l1]   =   j1;
bit_sx[l1]   =   m_mouseX;
bit_sy[l1]   =   m_nAppY   -   5;
bit_f[l1]   =   2;
if(++k1   ==   bit_max)
break;
}

if(bit_sound   >   1)
sound2.play;
return   true;
}//mouseDown   结束

public   boolean   mouseExit(Event   event,   int   i,   int   j)
{
m_mouseX   =   i;
m_mouseY   =   j;
return   true;
}

void   rend
{
boolean   flag   =   false;
boolean   flag1   =   false;
boolean   flag2   =   false;
for(int   k   =   0;   k   <   bits;   k++)
switch(bit_f[k])
{
default:
break;

case   1:   // '\001 '
bit_vy[k]   +=   rand.nextDouble   /   50D;
bit_px[k]   +=   bit_vx[k];
bit_py[k]   +=   bit_vy[k];
bit_l[k]--;
if(bit_l[k]   ==   0   ||   bit_px[k]   <   0.0D   ||   bit_py[k]   <   0.0D   ||   bit_px[k]   >   (double)m_nAppX   ||   bit_py[k]   >   (double)(m_nAppY   -   3))
{
bit_c[k]   =   0xff000000;
bit_f[k]   =   0;
}
else
if(bit_p[k]   ==   0)
{
if((int)(rand.nextDouble   *   2D)   ==   0)
bit_set((int)bit_px[k],   (int)bit_py[k],   -1);
}
else
{
bit_set((int)bit_px[k],   (int)bit_py[k],   bit_c[k]);
}
break;

case   2:   // '\002 '
bit_sy[k]   -=   5;
if((double)bit_sy[k]   <=   bit_py[k])
{
bit_f[k]   =   1;
flag2   =   true;
}
if((int)(rand.nextDouble   *   20D)   ==   0)
{
int   i   =   (int)(rand.nextDouble   *   2D);
int   j   =   (int)(rand.nextDouble   *   5D);
bit_set(bit_sx[k]   +   i,   bit_sy[k]   +   j,   -1);
}
break;

}//switch   结束

if(flag2   &&   bit_sound   >   0)
sound1.play;
}//   rend   结束

void   bit_set(int   i,   int   j,   int   k)
{
int   l   =   i   +   j   *   m_nAppX;
pix0[l]   =   k;
}

转载于:https://www.cnblogs.com/yangjin-55/archive/2012/11/25/2787435.html

一个用java演示的产生图像烟花的算法相关推荐

  1. JAVA中的多线程与运动仿真(1)——用JAVA来放一场烟花

    JAVA中的多线程与运动仿真(1)--用JAVA来放一场烟花 一.实现效果的简单展示: 初步实现的动态效果为在鼠标点击之后,点击之处出现一簇小球,然后向不同方向散开变大. 利用这一效果,再在后续增加颜 ...

  2. dbeaver连接mysql 驱动jar_用Intellij Idea创建一个普通的Java工程并用JDBC连接数据库...

    演示:如何创建一个普通的Java工程,并导入MySql数据库的驱动包,用JDBC方式来连接数据库. Intellj Idea 先创建工程 1.打开Intellij Idea,创建Project,Fil ...

  3. 如何在Java JVM中处理图像和视频

    在Java JVM中处理图像(更不用说视频)一直是一项艰巨的任务. 自JDK7以来, ImageIO类已经走了很长一段路,再加上常见的SDK错误,并不总是能给您您所期望的(图像质量差,不总是支持所有类 ...

  4. Java基于opencv实现图像数字识别(一),java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. python显示图片_python 一个figure上显示多个图像的实例

    方法一:主要是inshow()函数的使用 首先基本的画图流程为: import matplotlib.pyplot as plt #创建新的figure fig = plt.figure() #必须通 ...

  6. java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字

    转自:https://blog.csdn.net/a745233700/article/details/80203340java java调用tess4j识别图像文字 Tesseract-OCR支持中 ...

  7. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码

    两天搞定一个项目 Java Web MVC 网络商城教程+源代码 最近自学做了一个网络商城将以下是代码和教程 环境搭建–数据库设计–页面设计-后台设计 本项目使用的jdk版本是 运行项目前需要先配置好 ...

  8. Java基于opencv实现图像数字识别(一)

    Java基于opencv实现图像数字识别(一) 最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开:当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用Buffere ...

  9. Mockito一个用于Java开发的伟大的模拟框架

    原文地址:https://www.codeproject.com/articles/516360/mockito-a-great-mock-framework-for-java-developmen ...

最新文章

  1. 10.15 iptables filter表案例
  2. Junit单元测试学习笔记一
  3. homestead开发php,介绍ThinkPHP开发环境之Homestead
  4. Java堆、栈、内存分析
  5. 二十二.香港大学火星实验室R3LIVE框架跑官方数据集
  6. Android耗电优化
  7. Tree-AC训练实录
  8. c# 多线程界面卡顿_多线程同步等候 导致主界面UI卡顿,求解~
  9. Android数据库hibernate框架
  10. 【Pytorch】Pytorch常见的坑汇总
  11. 最新最全latex在sublime上的配置步骤全解
  12. 易语言5.71程序静态破解
  13. CDA的考试体系与人才能力模型
  14. 在Ubuntu上安装D-link DWA-131驱动
  15. 22牛客多校1 J.Serval and Essay (启发式合并)
  16. 苹果手机内屏幕出现彩色条纹怎么办
  17. 基于TextField实现通用搜索组件
  18. Bezier曲线、B样条和NURBS的基本概念
  19. 最实用的简历模板之一:QQ邮箱免费简历模板
  20. 最最简单的ensp拓扑图

热门文章

  1. MacOS安装brew安装git安装sdkman安装sbt
  2. Mysql数据库轻松学06—数据分析师常用:数据查询语言DQL之单表查询
  3. 阿迪达斯成立全球首个零售学院,并开设“模拟店铺”
  4. 2022年8月最新运维面试题-服务器上下架流程
  5. 5G推动下,XR的需求“爆发”会来自B端还是C端?...
  6. 大型网站技术架构-读后感
  7. cv2不能识别gif
  8. wps怎么下载仿宋gb2312_仿宋gb2312字体
  9. Android图表年度最强总结,一篇文章从入门到精通!
  10. 服务器指的是系统,服务器操作系统指的是什么