---
title: "P3D: Ejemplos de Funciones"
---

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

[[Funciones de dibujo]](/notas/funciones-dibujo.html)

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

# Funciones con figuras básicas

## Escalinata

![](/img/escalerasLoop.png)

Tomando el primer ejemplo de las notas de repetición

[[P3D: Ejemplos de repetición]](/notasP3D/repeticion.html)

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:

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

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

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

### Sin parámetros

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

```java
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:

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

### 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:

```java
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.

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

![](/img/escaleras30.png)

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

# Funciones con mallas propias

Revisa previamente las notas sobre mallas propias

[[P3D: Mallas propias]](/notasP3D/mallas.html)

## Plano

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

```java
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:

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