在处理中创建烟花模拟

Posted

技术标签:

【中文标题】在处理中创建烟花模拟【英文标题】:Creating a Fireworks Simulation in Processing 【发布时间】:2022-01-16 09:13:17 【问题描述】:

我有一个任务,我必须使用处理进行火灾模拟。我的目标是制作一个可以射出多个椭圆的圆形烟花。可以找到我正在尝试完成的图像here

我现在的代码似乎是在螺旋中绘制椭圆。如果有人想尝试一下,我已将代码的下载链接复制粘贴到底部。

Code link:

ArrayList<Ball> ballList;
int timer;
int amount;
int ball;
float angle;
boolean draws;
Ball b;

void setup() 
  size(1300, 700);

  ballList = new ArrayList<Ball>(ball);
  ball= 36;
  amount = 1000;


void draw() 
  background(0);
  for (int i = ballList.size()-1; i > -1; i--) 
    for (int k = 0; k < ball; k++) 
      Ball b = ballList.get(i);
      fill(255, 0, 0, b.a);
      b.display();
    // for loop
  // for loop
// void draw

void mousePressed() 
  for (int j = 0; j < ball; j++) 
    ballList.add (new Ball(angle));
  


class Ball 
  float X;
  float Y;
  float rad;
  float mx;
  float my;
  float a;
  float draw;
  color c = color(random(0, 255), random(0, 255), random(0, 255));
  float d;
  
 float angle;
  float X2;
  float Y2;
  float angle2;
  float x;
  float y;
  
  Ball(float _angle) 
    X = mouseX; //mouse X
    Y = mouseY; //mouseY;
    d = 0;
    rad= 10;
    angle = _angle;
    a = 255;
    
    
  //Ball
  void display()  // draw the ball and fill in colour
    
noStroke();
   a--;
    d++;
    angle += 10;
    if (angle >= 360) 
      angle = 0;
    
    angle2 = radians(angle);
    X2 = cos(angle2) * d + X; 
    Y2 = sin(angle2) * d + Y;
    a -= 0.5;
    ellipse(X2, Y2, rad, rad);
  // void display

【问题讨论】:

见How do I format my code blocks?。 【参考方案1】:

您看到螺旋的原因是您在绘制每个球之前更新了它的位置,使它们与您绘制的每个球有点不同步。 如果您在绘制之前先更新每个球的位置,您将获得您正在寻找的效果。

【讨论】:

【参考方案2】:

问题是您多次绘制同一个球,每次都移动它。相反,您应该分开移动球的逻辑并像这样显示它

void update()  // update the ball
    d++;
    a--;
//void update

void display()  // draw the ball and fill in colour
    noStroke();
    angle += 10;
    if (angle >= 360) 
        angle = 0;
    
    angle2 = radians(angle);
    X2 = cos(angle2) * d + X; 
    Y2 = sin(angle2) * d + Y;
    ellipse(X2, Y2, rad, rad);
// void display

然后,确保每个球只调用一次更新函数

for (int i = ballList.size()-1; i > -1; i--) 
    Ball b = ballList.get(i);
    b.update();
    for (int k = 0; k < ball; k++) 
        fill(255, 0, 0, b.a);
        b.display();
    // for loop
// for loop

【讨论】:

以上是关于在处理中创建烟花模拟的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战应用案例100篇(十七)-烟花算法从原理到实战应用

机器学习实战应用案例100篇(十七)-烟花算法从原理到实战应用

用python做一个烟花show

技术博客在Unity3d中实现烟花效果

简易版烟花

请高手解释一下..烟花在燃放后..在空中怎么才能形成文字或图....急求高手解释..