jardínBit

P3D: Ejemplos de Funciones

Podemos agrupar expresiones que construyen objetos en forma de funciones, ya sea con o sin parámetros.

[Funciones de dibujo]

Recuerda declarar las funciones fuera de setup() y de draw(). No olvides llamarlas cuando desees utilizarlas.

1 Funciones con figuras básicas

1.1 Escalinata

Tomando el primer ejemplo de las notas de repetición

[P3D: Ejemplos de repetición]

Podemos identificar que una estructura en forma de escalinata consiste en múltiples cajas desplazadas en dos dimensiones.

Estas dos expresiones repetidas múltiples veces resultan en una estructura de ese tipo:

box(ancho, huella, peralte);
translate(0, huella, peralte);

Un ciclo for que dibuja 10 cajas de este tipo se vería así:

for( int n=1; n<=10; n=n+1){
  box(ancho, huella, peralte);
  translate(0, huella, peralte);
}

1.1.1 Sin parámetros

Ese bloque de código puede ir dentro de una función escalinata(), que siempre dibujará 10 escalones:

void escalinata() {
  // dibuja 10 escalones
  float ancho = 2; // (en X)
  float huella = 0.3; // (en Y)
  float peralte = 0.2;  // (en Z)
  pushMatrix();
  for( int n=1; n<=10; n=n+1){
    box(ancho, huella, peralte);
    translate(0, huella, peralte);
  }
  popMatrix();
}

Nota el uso de pushMatrix() y popMatrix() para que las transformaciones realizadas no afecten nada más en el código.

Podemos llamar esa función desde draw(), transformándola si queremos para dibujar múltiples:

escalinata(); // dibuja escalinata
translate( 4, 0, 0 ); // traslada 4 unidades a la "derecha"
escalinata(); // dibuja otra escalinata

1.1.2 Con parámetros

Podemos tener más flexibilidad con funciones que tengan parámetros.

Por ejemplo, una función de dibujo escalinata( ) con dos parámetros: el número de escalones, y el ancho del escalón:

void escaleras(int numeroEscalones, float ancho){
  float huella = 0.3; // (en Y)
  float peralte = 0.2;  // (en Z)

  for(int n=1; n<=numeroEscalones; n=n+1 ) {
    box(ancho, huella, peralte);
    translate(0, huella, peralte);
  }
}

Nota cómo el ciclo for ahora tiene el parámetro numeroEscalones en vez del 10 literal.

Al llamar la función hemos de especificar los parámetros, ya sea con literales o con variables.

escalinata( 30, 2.5 ); // dibuja escalinata de 30 escalones de 2.5 unidades de ancho

Practica modificando la función para que todas las dimensiones sean parámetros de la función.

2 Funciones con mallas propias

Revisa previamente las notas sobre mallas propias

[P3D: Mallas propias]

2.1 Plano

Esta función dibuja un plano cuadrado de lado unidades, centrado en el origen y sobre el plano XY

void plano(float lado) {
  beginShape(QUADS);
  vertex(lado/2, -lado/2);
  vertex(lado/2, lado/2);
  vertex(-lado/2, lado/2);
  vertex(-lado/2, -lado/2);
  endShape();
}

Para llamarla:

plano( 10 ); // dibuja plano de 10 unidades de lado