Esta actividad consiste en dibujar el siguiente triángulo.
Teóricamente el triángulo estaría formado por infinitos triángulos. Nosotros dibujaremos un número limitado. El proceso sería algo así como el la siguiente imagen.
En la imagen vemos a los miembros de la banda Pink Floyd en una casa con jardín. En la casa hay un cuadro que representa la misma imagen, aunque algo alterada. Podría ser igual. Dentro de la imagen del cuadro, vemos otra vez el cuadro, y dentro de él otro cuadro, y así sucesivamente hasta el infinito. Para hacer esto necesitamos el concepto de función. Un ejemplo de función sería pow. La función pow sirve para calcular potencias. por ejemplo pow(3,2) sería 32 y pow(5,4), 54
Una función tiene unos parámetros, por ejemplo, en el caso de pow(5,4) 5 y 4 serían los parámetros de la función y 54 sería el resultado.
La función pow está ya definida en processing, pero si no lo estuviera, podríamos definirla nosotros. Después del draw, escribiríamos lo siguiente:
float pow(float a, int b){ //float pow indica que la función se llama pow y devuelve un flotante. Float a, int b indica que los parámetros de la función son a y b, flotante y entero
float potencia =1;
for (int i =1;i<=b;i=i+1){ // Potencia vale 1 al principio, pero se multiplicará b veces por a
potencia = potencia*a;
}
return potencia; // devuelve el resultado de la función
}
Una vez hemos definido la función, podemos utilizarla dentro del programa. Las variables potencia e i son propias de la función. Son internas. No pueden ser usadas fuera de la función. De hecho pueden estar duplicadas y existir varias con el mismo nombre siempre que estén en diferentes funciones.
Esto es un ejemplo del uso de funciones. Cópialo y ejecútalo y observa cómo se utiliza la función dibujaFlor()
void setup(){
size (500,500);
noLoop();//Para que sólo dibuje una vez
}
void draw(){
for(int i = 1; i<10; i++){
for(int j = 1; j<10; j++){
dibujaFlor (10 + 50 *i,10 + 50 * j);
}
}
}
void dibujaFlor(int x, int y){
line(x,y,x,y-10);
line(x,y-10, x-10, y-20);
line(x,y-10, x+10, y-20);
line(x,y-10, x, y-25);
ellipse(x-10, y-20, 3,3);
ellipse(x+10, y-20, 3,3);
ellipse(x, y-25, 3,3);
}
Volviendo al cuadro de Pink Floyd, el procedimiento sería algo así: imaginemos la función dibujalacasa(recuadro) Yo le paso un recuadro y en él dibuja la casa con los miembros de Pink Floyd. Dentro de esa función dibujalacasa están las instrucciones para dibujar el cuadro. Y dentro de las instrucciones para dibujar el cuadro está la instrucción dibujalacasa(recuadro) al ejecutarse, otra vez se encuentra la misma función....y el programa no acaba nunca. El programa en realidad no dibujaría nada. Se quedaría bloqueado.
La solución sería hacer algo así dibujalacasa(recuadro, contador). El parámetro contador le dice a la función el número de orden que lleva, el nivel de profundidad del cuadro. La primera vez valdría uno, la segunda dos,....y sólo se llamaría a dibujalacasa si contador es menor que un determinado límite. Contador no sería el número de veces que se ha llamado a la función, porque podríamos hacer una casa con dos cuadros. Y se dibuja un cuadro con contador=1 y el otro también, y los cuadros del segundo nivel serían cuatro, con contador =2, y luego 8 con contador = 3 y así hasta el límite que queramos poner.
Ejercicio: Haz un programa que dibuje un triángulo. dibuja un triángulo equilátero con la función line que funciona así:
line(x,y,x2,y2); dibuja un segmento del punto x,y al x2,y2.
Modifica el programa de forma que el triángulo se dibuje mediante la función dibujaTriangulo (una costumbre que se suele tener es que cuando una función o variable está formada por varias palabras, se pone una mayúscula en medio para separar) La función dibujaTriangulo recibirá 6 parámetros float que se corresponderán con las coordenadas de los puntos A,B,C de la figura anterior. También tendrá un contador. Ahora en la función draw añades las instrucción dibujaTriángulo. Comprueba que se dibuja un triángulo.
Ahora, dentro de la función dibujaTriángulo, calcula las coordenadas de los puntos F, E y D. El punto E tendrá de x el valor medio entre la x de C y la de B, lo mismo con su y, el F tendrá como cada una de sus coordenadas el valor medio de las de C y A, y D los valores medios de las de B y A. Incrementa el contador, y haz que ,si contador es menor que cinco, llame a la función dibujaTriángulo tres veces. Una para A,F y D, otra para F,C,E y otra para D,E,B.
Comprueba que funciona, y cambia el límite de cinco a un número mayor