Gráficas simultáneas.  

prev.gif (997 bytes)home.gif (1054 bytes)next.gif (998 bytes)

  

 El propósito del programa es el de dibujar las trayectorias seguidas por proyectiles disparados con la misma velocidad inicial v0  y con ángulos de tiro de 10º, 20º, 30º, 40º, 50º, 60º, 70º, 80º, respectivamente.

 

EjercicioApplet01 aparecerá en un explorador compatible con JDK 1.1.

 

Diseño

Se diseña el applet dividiendo las tareas entre la clase que deriva de Applet (el interfaz de usuario) y la clase que deriva de Canvas (la representación gráfica).

 

En modo diseño (pestaña Design) situar en su parte inferior un panel denominado panelControl. Sobre este panel colocar dos paneles (véase la figura)

El primero, panelVelocidad contiene un Label cuyo título es “velocidad inicial <100 m/s” y un control TextField (textVelocidad) .

El panelBoton contiene un control Button (buttonTrayectorias) cuyo título es “Trayectorias”.

 

Respuesta a las acciones del usuario

Cada vez que se introduzca un valor menor o igual que cero o mayor que 100 en el control de edición textVelocidad el control recupera el foco y se seleccionan todos los caracteres de dicho control.

 

En la función respuesta a la acción de pulsar el botón buttonTrayectorias, se ha de pasar el dato de la velocidad inicial al canvas llamando a la función miembro apropiada.

 

La clase derivada de Canvas

Datos sobre el tiro parabólico

 

Ecuación de la trayectoria

 

 

El alcance máximo se obtiene para el ángulo de 45º y es

 

La altura máxima se alcanza cuando el ángulo de disparo es de 90º

 

A continuación se da una plantilla que sugiere un posible procedimiento de crear la clase derivada de Canvas.

 

public class MyCanvas extends Canvas {

//anchura y altura del canvas

     int wAncho, wAlto;

//anchura y altura de un carácter

     int cAlto, cAncho;

//orígenes

     int orgX, orgY;

//escalas

     double escalaX, escalaY;

//Velocidad inicial

      double vInicial;

//ángulos de tiro

    final int[] angulos={10, 20, 30, 40, 50, 60, 70, 80};

    final int NPARTICULAS=angulos.length;

//alcances

    double[] alcance=new double[NPARTICULAS];

//para guardar los puntos de la trayectoria

    Polygon[] pol=new Polygon[NPARTICULAS];

     int divisionesX;   //divisiones del eje X

     int divisionesY;   //divisiones del eje Y

     double dx; //paso

     boolean bNuevo=false;

 

  public MyCanvas() {

//crear el array de objetos Polygon

 

//establecer el color de fondo

 

  }

 

  void origenEscalas(Graphics g){

//ancho y alto de applet

       wAncho=

       wAlto=

//dimensiones de los caracteres

       cAncho=

       cAlto=

//orígenes

       orgX=

       orgY=

}

 

  void setNuevo(double velocidad){

//inicializa el miembro dato vInicial

 

//calcula el alcance para cada ángulo de tiro

 

//calcula el alcance máximo a 45º

//divisiones cada 50 m, determinar escala horizontal escalaX,

 

//calcula la altura máxima a 90º

/divisiones cada 25 m, determinar escala vertical escalaY,

 

//el paso dx

 

  }

 

 void dibujaEjes(Graphics g){

     int x1, y1;

//dibuja el eje Y, las divisiones cada 25 m

 

//dibuja el eje X las divisiones cada 50 m

 

  }

 

  double posicion(int angulo, double x){

//ecuación de la trayectoria para cada ángulo de tiro

 

 }

 

  public void trayectorias(Graphics g){

//determina las coordenadas de cada punto (pixel) de la trayectoria en el

//canvas y las guarda en su respectivo elemento del array de la clase Polygon

      int x1, y1;

      for(int i=0; i<NPARTICULAS; i++){

        for(double x=0.0; x<alcance[i]; x+=dx){

             x1=…

             y1=…

             pol[i].addPoint(x1, y1);

        }

    }

//dibuja todas las trayectorias

 

//muestra el ángulo y el valor del alcance en forma de tabla

 

  }

 

 public void paint(Graphics g){

     origenEscalas(g);

     dibujaEjes(g);

     if(bNuevo)

        trayectorias(g);

 }

}