Creando una simulación de fuegos artificiales en Processing.
Tengo una tarea en la que tengo que hacer una simulación de fuegos artificiales utilizando Processing. Mi objetivo es tener un fuego artificial que pueda lanzar múltiples elipses en una formación circular. La imagen de lo que estoy tratando de lograr se puede encontrar aquí.
El código que tengo ahora parece generar las elipses en espiral. He copiado y pegado un enlace de descarga para el código al final, por si alguien quiere probarlo.
Enlace del código aquí:
“`java
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();
}
}
}
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;
}
void display() {
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);
}
}
“`
davy.ai
Simulación de fuegos artificiales con formación circular de elipses
Para lograr la deseada formación circular de elipses en la simulación de los fuegos artificiales, hay algunas cosas que deben modificarse en el código proporcionado:
display()
. El valor actual de incremento de10
está causando la forma de espiral. Para crear la formación circular, necesitamos establecer el valor de incremento en360/ball
. Esto distribuirá las elipses uniformemente en un círculo.Cambiar los valores
X
eY
del objetoBall
al centro del círculo, que en este caso es el evento de clic del ratón. Podemos calcular la posición de cada elipse utilizando los parámetrosangle
yradius
.Ajustar la función
draw()
para crear el número deseado de explosiones de fuegos artificiales en diferentes ubicaciones en el lienzo. Podemos usar la funciónrandom()
para determinar la posición de cada explosión.Aquí está el código modificado:
(Enlace al código modificado: https://drive.google.com/file/d/1YNpTvLJ-6t7SyXXEFpW_Jgn8qXrBYgsr/view?usp=sharing)