// a posicao x,y dos varios pontos
float linhaX[] = {0, 5};
float linhaY[] = {0, 5};
// a velocidade x, y de cada ponto
float velX[] = {4, 4};
float velY[] = {5.5, 7.1};
// indica se o primeiro ponto bateu
// na borda, na frame actual
boolean bateu;
// inicializacao do programa
void setup() {
size(500, 500);
frameRate(20);
}
void draw() {
background(0);
stroke(255);
// desenhar as linhas
for (int i = 1; i < linhaX.length; i = i + 1) {
line(linhaX[i-1], linhaY[i-1], linhaX[i], linhaY[i]);
ellipse(linhaX[i-1], linhaY[i-1], 5, 5);
}
// actualizar as posicoes de todos os ponto
for (int i = 0; i < linhaX.length; i = i + 1) {
linhaX[i] = linhaX[i] + velX[i];
linhaY[i] = linhaY[i] + velY[i];
}
// vamos verificar se o primeito ponto bateu na borda
bateu = false;
if (linhaX[0] > 500 || linhaX[0] < 0) {
velX[0] = -velX[0];
bateu = true;
}
if (linhaY[0] > 500 || linhaY[0] < 0) {
velY[0] = -velY[0];
bateu = true;
}
// verificar todos os outros
for (int i = 1; i < linhaX.length; i = i + 1) {
if (linhaX[i] > 500 || linhaX[i] < 0) {
velX[i] = -velX[i];
}
if (linhaY[i] > 500 || linhaY[i] < 0) {
velY[i] = -velY[i];
}
}
// se o ponto bateu na borda
// acrescentamos um ponto
if (bateu == true) {
float tmpX[] = new float[linhaX.length+1];
float tmpY[] = new float[linhaX.length+1];
float tmpVelX[] = new float[linhaX.length+1];
float tmpVelY[] = new float[linhaX.length+1];
for (int i = 0; i < linhaX.length; i = i+1) {
tmpX[i] = linhaX[i];
tmpY[i] = linhaY[i];
tmpVelX[i] = velX[i];
tmpVelY[i] = velY[i];
}
tmpX[linhaX.length] = random(500);
tmpY[linhaX.length] = random(500);
tmpVelX[linhaX.length] = random(1, 5);
tmpVelY[linhaX.length] = random(1, 5);
linhaX = tmpX;
linhaY = tmpY;
velX = tmpVelX;
velY = tmpVelY;
}
}