// 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}; int cor[] = {155, 255}; // 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) { stroke(cor[i]); 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]; int tmpCor[] = new int[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]; tmpCor[i] = cor[i]; } tmpX[linhaX.length] = random(500); tmpY[linhaX.length] = random(500); tmpVelX[linhaX.length] = random(1, 5); tmpVelY[linhaX.length] = random(1, 5); tmpCor[linhaX.length] = color(random(255), random(255), random(255)); linhaX = tmpX; linhaY = tmpY; velX = tmpVelX; velY = tmpVelY; cor = tmpCor; } }