Fundamentos de Programación  >  Clases  >  Ejercicios  >  ejercicio 4

Ejercicio 4

FAQ: Preguntas frecuentes

Objetivos

Enunciado

Se trata de pintar varios gusanos de una cierta longitud que se mueven a lo largo de caminos definidos por funciones paramétricas.

El ejercicio busca extender el ejercicio 3 a un número indefinido de gusanos.

Puede descargar Ejercicio4.jar para ver cómo funciona con 2 gusanos.

Funciones paramétricas

Tendremos una interface Funcion:
public interface Funcion {
    /**
     * Valor de X en función de t.
     *
     * @param t parametro.
     * @return x(t).
     */
    double fx(double t);

    /**
     * Valor de Y en función de t.
     *
     * @param t parametro.
     * @return y(t).
     */
    double fy(double t);
}

de la que hay que derivar 3 implementaciones concretas

En el ejemplo ejecutable anterior, se han empleado las funciones

Funcion0()Funcion2(5, 3)
fx(t) = 2 cos(t) + cos(8t)
fy(t) = 2 sen(t) + sen(8t)
fx(t) = 3 sen(At)
fy(t) = 3 cos(Bt)

El alumno puede utilizar otras.

Cola limitada de puntos

Dada una interface ColaLimitada:
public interface ColaLimitada
        extends Iterable {

    /**
     * Anade un punto al final de la cola.
     * Si se supera el tamano maximo, se elimina el primer punto de la cola.
     *
     * @param punto nuevo punto.
     */
    public void mete(Punto2D punto);

    /**
     * @return el numero de puntos en la cola.
     */
    public int size();


    /**
     * Para recorrer los puntos metidos en la cola.
     *
     * @return iterador sobre los puntos en la cola.
     */
    public Iterator iterator();
}

El alumno debe proporcionar 2 implementaciones:

Nótese que ColaLimitada extiende la interface Iterable que obliga a proporcionar un mátodo "iterator" que permite hacer bucles del tipo "for each">.

Un gusano

Un gusano queda definido por una función, una cola limitada y un color:
import java.awt.*;

public class Gusano {
    private final Funcion funcion;
    private final ColaLimitada cola;
    private final Color color;

    /**
     * Constructor.
     *
     * @param funcion una funcion parametrica.
     * @param cola    una cola de tamano limitado.
     * @param color   un color para pintar.
     */
    public Gusano(Funcion funcion, ColaLimitada cola, Color color) {
        this.funcion = funcion;
        this.cola = cola;
        this.color = color;
    }

    /**
     * Getter.
     *
     * @return funcion parametrica.
     */
    public Funcion getFuncion() {
        return funcion;
    }

    /**
     * Getter.
     *
     * @return cola de puntos.
     */
    public ColaLimitada getCola() {
        return cola;
    }

    /**
     * Getter.
     *
     * @return color para pintarse.
     */
    public Color getColor() {
        return color;
    }
}

O sea, un clase que simplemente agrupa todos los elementos que definen un gusano.

Pintor de gusanos

Por último se pide desarrollar la class PintaGusanos que recibe un papel y una lista de gusanos y los va pintando a la vez.

Algo así:

para t desde el valor inicial al final con incrementos dt
     se borra el papel
          para cada gusano en la lista
               usando la función del gusano, se calcula un punto2D,
               se mete en la cola del gusano y
               se pinta la cola del gusano del color que corrsponde
     se pinta el papel
    se espera un ratito para ver la imagen (ej. 0.1s)

Clases

Tenemos objetos de varias clases, algunas de las cuales se las damos y otras tiene que programarlas el alumno:

El alumno debe presentar las siguientes clases:

  1. class Funcion0 implements Funcion (documentación)
  2. class Funcion1 implements Funcion (documentación)
  3. class Funcion2 implements Funcion (documentación)
  4. class ColaLimitadaLista implements ColaLimitada (documentación)
  5. class ColaLimitadaArray implements ColaLimitada (documentación)
  6. class PintaGusanos (documentación)