Repetición: ejercicio de dibujar un cÃrculo fractal (solución)
March 27, 2008 – 9:05 amAquà tenéis una solución para el ejercicio de la semana anterior:
Downloaddownload.txt | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | void circuloFractalSimple(float radio){ // Si el circulo que debemos dibujar // es demasiado pequeño, salimos de la recursion if(radio < 8){ return; } // Dibujamos nuestro circulo ellipse(0, 0, radio, radio); // Guardamos nuestro estado // Esto es necesario porque // sino acumulamos todas los movimientos (translate) pushMatrix(); // Nos movemos al centro del circulo secundario de la derecha translate(radio / 4, 0); // Dibujamos el circulo secundario de la derecha // El circulo siguiente sera de tamaño la mitad que el de ahora circuloFractalSimple(radio / 2); // Volvemos a nuestro estado // Para no acumular los movimientos (translates) popMatrix(); // Guardamos nuestro estado pushMatrix(); // Nos movemos al centro del circulo secundario de la izquierda translate(-radio / 4, 0); // Dibujamos el circulo secundario de la izquierda circuloFractalSimple(radio / 2); // Volvemos a nuestro estado popMatrix(); } void setup(){ // Definimos la talla de nuestra pantalla size(500, 500); // Pintamos el fondo de blanco background(255); // Cogemos el lapiz negro stroke(0); // Nos situamos a bajo (y=height) y al centro de la pantalla (x=width/2) translate(width/2, height/2); // Dibujamos un circulo inicial de 400 pixeles circuloFractalSimple(400); saveFrame("circuloFractalSimple.jpg"); } |
Y aquà tenéis una solución para la versión más compleja:
Downloaddownload.txt | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | void circuloFractal(float radio, boolean negro){ // Si el circulo que debemos dibujar // es demasiado pequeño, salimos de la recursion if(radio < 8){ return; } // Dejamos el lapiz noStroke(); // Cogemos el pincel (para rellenar) if(negro){ // De color negro si el parametro negro es verdadero fill(0); }else{ // De color blanco si el parametro negro es falso fill(255); } // Dibujamos nuestro circulo ellipse(0, 0, radio, radio); // Guardamos nuestro estado // Esto es necesario porque // sino acumulamos todas los movimientos (translate) pushMatrix(); // Nos movemos al centro del circulo secundario de la derecha translate(radio / 4, 0); // Dibujamos el circulo secundario de la derecha // Con el color invertido // "!" es el operador "negacion" // si el circulo de ahora era negro, el siguiente no lo sera // El circulo siguiente sera de tamaño la mitad que el de ahora circuloFractal(radio / 2, !negro); // Volvemos a nuestro estado // Para no acumular los movimientos (translates) popMatrix(); // Guardamos nuestro estado pushMatrix(); // Nos movemos al centro del circulo secundario de la izquierda translate(-radio / 4, 0); // Dibujamos el circulo secundario de la izquierda circuloFractal(radio / 2, !negro); // Volvemos a nuestro estado popMatrix(); } void setup(){ // Definimos la talla de nuestra pantalla size(500, 500); // Pintamos el fondo de blanco background(255); // Nos situamos a bajo (y=height) y al centro de la pantalla (x=width/2) translate(width/2, height/2); // Dibujamos un circulo inicial de 100 pixeles y de color negro (negro = true) circuloFractal(400, true); saveFrame("circuloFractal.jpg"); } |