Para este trabalho, testei as funcionalidades do Processing, criando a figura de boneco de neve, para que esta figura ganhasse forma adicionei variadas figuras geométricas. Para a composição animada utilizei como referência um dos exemplos dado pela professora no e-mail que enviou à turma. Queria utilizar o exercício estático para completar o exercício animado, e para que o resultado final tivesse sentido, o exemplo usado foi o das partículas interactivas, que criam a ilusão de neve à figura, e que se afastam cada vez que aproximamos o cursor das partículas.
Exercício 1 – Composição estática
size (400,400); background (#32316F); //noite noStroke(); fill (#37376F); quad(0,50, 400, 50, 400, 100, 0 ,100); fill(#3E3C6F); quad(0, 100, 400,100, 400, 150, 0 ,150); fill(#3C436F); quad(0, 150, 400,150, 400, 200, 0 ,200); fill(#3C486F); quad(0, 200, 400,200, 400, 250, 0 ,250); fill(#3C4D6F); quad(0, 250, 400,250, 400, 300, 0 ,300); fill(#3C506F); quad(0, 300, 400,300, 400, 350, 0 ,350); fill(#3C536F); quad(0, 350, 400,350, 400, 400, 0 ,400); //lua fill (#F5ECCB); noStroke (); ellipse (50, 50, 80, 80); noFill (); stroke (#EADEB2); strokeWeight (3); ellipse (30, 30, 10, 10); ellipse (40, 45, 15, 15); ellipse (50, 20, 5, 5); ellipse (60, 70, 13, 13); ellipse (80, 55, 10, 10); ellipse (70, 35, 8, 8); ellipse (65, 50, 3, 3); ellipse (25, 70, 5, 5); ellipse (38, 80, 9, 9); //chao noStroke(); fill(200); ellipse(90, 350, 70,70); ellipse (330, 340, 80, 80); ellipse (0, 335, 60, 60); ellipse (400, 335, 50, 50); ellipse (200, 350, 30, 30); fill (220); noStroke (); quad (0, 350, 400, 350, 400, 400, 0, 400); ellipse (0, 350, 50, 50); ellipse (50, 350, 75, 75); ellipse (100, 360, 60, 60); ellipse (300, 350, 60, 60); ellipse (350, 350, 70, 70); ellipse (400, 350, 50, 50); ellipse (150, 350, 70, 70); ellipse (250, 350, 75, 75); //braços fill(255); stroke (#7E4C09); strokeWeight (8); line (25, 130, 200, 250); line (375, 130, 200, 250); strokeWeight (5); line (50, 100, 40, 142); line (38, 152, 50, 148); line (35, 185, 70, 160); line (350, 100, 360, 142); line (362, 152, 350, 148); line (365, 185, 330, 160); //cabeça e tronco noStroke (); ellipse (200, 105, 100, 105); ellipse (200, 250, 200, 200); //botões fill (#22AA7E); ellipse (200, 180, 10, 10); ellipse (200, 225, 10, 10); ellipse (200, 275, 10, 10); ellipse (200, 325, 10, 10); //cara fill (#F7A323); triangle(120,130,197,100,205,112); triangle (120, 130, 185, 110, 205, 115); ellipse (200, 107, 17, 17); stroke (#C11419); noFill (); strokeWeight (5); arc(200, 130, 30, 25, 0, PI); fill (0); stroke (0); ellipse (177, 90, 14, 14); ellipse (223, 90, 14, 14); noStroke (); fill (255); ellipse (175, 93, 5, 5); ellipse (221, 93, 5, 5); ellipse (179, 89, 3, 3); ellipse (225, 89, 3, 3); //pés fill (#383938); arc (150, 360, 70, 50, PI, 2*PI); arc (250, 360, 70, 50, PI, 2*PI); //chapéu fill (#EA2470); quad (185, 50, 215, 50, 215, 55, 185, 55); fill (0); quad (175, 10, 225, 10, 215, 50, 185, 50); quad (165, 55, 235, 55, 235, 63, 165, 63); //chao a frente dos pes fill(240); ellipse (140, 370, 40, 40); quad(0,370, 400, 370, 400,400,0,400); ellipse (0, 370, 70, 70); ellipse (50, 370, 50, 50); ellipse (100, 370, 65, 65); ellipse (150, 370, 20, 20); ellipse (175, 370, 35, 35); ellipse (200, 370, 23, 23); ellipse (235, 380, 50, 50); ellipse (275, 380, 60, 60); ellipse (310, 370, 30, 30); ellipse (350, 370, 60, 60); ellipse (400, 370, 50, 50); save("boneco.png");
Exercício 2 – Composição interactiva
float px[]; float py[]; int num_particles = 150; PImage img; void setup() { size(400, 400); img = loadImage("boneco.png"); px = new float[num_particles]; py = new float[num_particles]; for (int i = 0; i < num_particles; i++) { px[i] = random (width); py[i] = random (height); px[i] = random (width); py[i] = random (height); } } void draw() { image(img, 0, 0, 400, 400); for (int i = 0; i < num_particles; i = i+1) { px[i] = constrain (px[i] + random (-5, 5), 0, width); py[i] = constrain (py[i] + random (-5, 5), 0, height); if (dist (px[i], py[i], mouseX, mouseY) < 40) { float vx = (px[i] - mouseX); float vy = (py[i] - mouseY); px[i] = px[i] + vx; py[i] = py[i] + vy; } fill(230); noStroke (); ellipse (px[i], py[i], 10, 10); ellipse (px[i], py[i], 10, 10); } }