CAPÍTULO III DESARROLLO DE LA APLICACIÓN

CAPÍTULO III – DESARROLLO DE LA APLICACIÓN Desarrollo de la aplicación III.1. Desarrollo de la aplicación En el presente capítulo se expone la solu

4 downloads 92 Views 713KB Size

Recommend Stories


DESARROLLO DE LOS ADOLESCENTES III. IDENTIDAD Y RELACIONES SOCIALES
DESARROLLO DE LOS ADOLESCENTES III. IDENTIDAD Y RELACIONES SOCIALES Programa y Materiales De Apoyo Para El Estudio Licenciatura en Educación Secundar

La tragedia de Ricardo III
La tragedia de Ricardo III (The life and death of king Richard III) William Shakespeare http://www.poesiayprosa.com.ar 1 La tragedia de Ricardo II

III. Sistema político Régimen constitucional Antecedentes históricos Desarrollo constitucional
III. Sistema político ................................................................. 17 1. Régimen constitucional .................................

Story Transcript

CAPÍTULO III – DESARROLLO DE LA APLICACIÓN

Desarrollo de la aplicación

III.1. Desarrollo de la aplicación En el presente capítulo se expone la solución empleada para la realización del simulador. Para la implementación de las distintas funciones de la aplicación se ha optado por determinadas alternativas para su realización, estas alternativas se traducen en el lenguaje de programación en una serie de clases y métodos. La relación clase – funcionalidad suele ser una relación directa, aunque no tiene por que cumplirse. En los siguientes apartados por tanto se explica esta relación para conocer en profundidad el funcionamiento interno del simulador.

III.2. Diagrama general A continuación se presenta un diagrama muy general, en el que se puede apreciar las tres partes perfectamente diferenciadas de las que consta el simulador.

Figura III.2.1. Diagrama general del simulador

47

Desarrollo de la aplicación En los siguientes apartados se desarrollan cada una de las partes: Representación 3D, estudio radioenlace y ayuda. La primera y la última son totalmente nuevas con respecto a las versiones anteriores. La parte de representación 3D aunque escrita desde cero reutiliza algunas ideas de sus predecesores. La parte de estudio del radioenlace ha sufrido un cambio más interno que de apariencia. Aunque es una parte perfectamente diferenciada del resto de las partes de la aplicación debido a que su tratamiento interno no presenta diferenciación con respecto al resto de elementos de interacción con el usuario (paneles) se ha incluido su descripción en el apartado de paneles. Al ser la más importante y con mayor número de novedades en los próximos apartados se incide más en la primera parte. En la segunda se hace hincapié en los cambios respecto a las versiones anteriores mientras que en la parte de la ayuda se describe brevemente por ser un elemento al que ya se considera habituada cualquier persona que haya empleado aplicaciones informáticas o navegadores Web. Como convenio se establece la siguiente relación simbología-significado para conseguir una clara representación en los sucesivos diagramas:

Clase

Método

Nodo

Otros

Figura III.2.2. Simbología diagramas

48

Desarrollo de la aplicación

III.3. Representación 3D Esta parte presenta la estructura típica de una aplicación jME. Su diagrama es el mostrado en la siguiente figura:

Figura III.3.1. Diagrama general jOrbit

La clase principal de la aplicación se llama jOrbit. Se trata de una clase que implementa los métodos básicos de la clase FixedFrameRate de la que desciende, necesarios para ejecutar la aplicación. La elección de FixedFrameRate obedece a que esta clase proporciona métodos para el control de frames por segundo de la aplicación. Métodos muy útiles para controlar el consumo de la aplicación y el movimiento de los elementos en los escenarios 3D. Además en jOrbit se ha implementado un método adicional ActualizarInfo que es llamado desde el método update. Su función es la de tener actualizada la información de los distintos elementos de la escena para que sea accesible al usuario a través del panel de información. ActionCamera es una clase que determina el movimiento de la cámara. Es empleada en initSystem para determinar esta clase como manejadora del movimiento de la cámara en la escena. Con esta clase se consigue los movimientos de giro alrededor de la Tierra y de aproximación y alejamiento. BasicSpace3D es la clase encargada de implementar el escenario 3D completo.

49

Desarrollo de la aplicación GestorGUI es la clase encargada de gestionar los paneles que aparecen en nuestro escenario. Tanto BasicSpace3D como GestorGUI son creadas en initGame y son realmente las clases más importantes de la aplicación.

III.3.1. Escenario 3D Se ha comentado que jME sigue una estructura jerárquica nodal en forma de árbol. La clase BasicSpace3D lo que hace es construir y gestionar el árbol de elementos 3D de nuestra aplicación. La estructura que crea para ser mostrada en pantalla se muestra en la siguiente figura:

Figura III.3.1.1. Diagrama BasicSpace

50

Desarrollo de la aplicación En BasicSpace3D se crea el nodo que será el nodo raíz de toda la escena 3D: BasicSpace. A este nodo se asigna unas propiedades que simula la luz del sol en el espacio y afectará a todos sus hijos. Como hijos se le añade un espacio con estrellas: nodo Espacio y planetas: nodo Planetas. La aplicación está abierta a añadirle tantos planetas como se desee. Para esta aplicación sólo se necesita uno: la Tierra. El nodo Tierra se añade al genérico de tipo Planetas. Este nodo es representado como una esfera de radio 6371km y una textura que simula el aspecto de la Tierra desde el espacio. A este nodo se le pueden añadir Constelaciones, formadas por órbitas y satélites, estaciones terrenas, líneas que representarán los ángulos de visión de determinados satélites, una representación del eje inercial del sistema y el plano ecuatorial. Para esta aplicación las constelaciones están limitadas a tener una única órbita pero varios satélites por órbita. Además de poder representarse sobre dichas órbitas su plano orbital y el punto del perigeo.

III.3.1.1. En el interior de BasicSpace3D Para conseguir gestionar el nodo BasicSpace, BasicSpace3D dispone de una serie de variables y métodos que lo hacen posible. Variables

Desde BasicSpace se controlan los nodos activos (representados), las constelaciones y estaciones añadidas, mediante los métodos propios de los nodos (Node de jME 5) y conjuntos de ArrayList (Java).

5

Para mayor información véase documentación de jME

51

Desarrollo de la aplicación Métodos BasicSpace3D(Renderer r)

Constructor de la clase donde: -

inicializa variables

-

Configura buffer de profundidad de renderizado (que se verá y que no)

-

Crea

nodos:

Planetas,

BasicSpace, Tierra,

espacio,

constelación,

estaciones, lineas, Eje_Inercial. -

Añade

los

nodos

a

sus

padres

correspondientes -

Crea luz del espacio

Void BorrarLineas()

Elimina todos los hijos del nodo líneas

Vector2f CalculaPS(Vector3f v)

Dado un vector con tres dimensiones v, devuelve su latitud y longitud en forma de vector de 2 dimensiones

Void CurvaAZ(Vector3f a, Vector3f

Dibuja la curva que representa el azimut.

b,Vector3f estac) Vector3f Elegir(Vector3f ref, Vector3f

Selecciona un punto de la curva que une la

origen, Vector3f[] caso)

estación terrena con el punto subsatelital que tenga la misma distancia que ref con origen (estación terrena)

void MoverSatelites(){

Establece la siguiente posición de los satélites.

void MoverTierra()

Establece el movimiento de rotación de la Tierra

void RepresentarAZ(int numconst, int

Representa todas las líneas inherentes a la

numsat)

representación del azimut para el satélite seleccionado mediante numconst y numsat: -

Línea que une polo norte con estación terrena

-

Línea que une estación terrena con punto subsatelital

-

El ángulo azimut.

void RepresentarEL(int numconst, int

Representa

todos

los

elementos

(líneas)

numsat)

inherentes a la representación de la elevación para el satélite seleccionado mediante numconst y numsat: -

52

Línea que une centro de la Tierra con

Desarrollo de la aplicación satélite. -

Línea que une estación terrena con satélite.

-

Línea que representa el horizontal local. Tangente a la superficie donde está la estación terrena.

-

Ángulo de elevación.

Node crearEspacio3D (Skybox universo3d)

Crea el entorno estrellado del espacio.

Spatial crearPerigeo(int numconst,

Crea una pirámide de color col para representar

ColorRGBA col)

el punto del perigeo de la órbita seleccionada numconst.

Spatial crearPlano(int numconst,

Crea plano de color col y le asigna como nombre

ColorRGBA col)

el número de la constelación al que corresponde.

void luzartificial(LightState lightStatea)

Crea un estado adicional de luces, además del creado en BasicSpace3D, se establece la posibilidad de tener la Tierra sin zona de oscuridad.

meterPerigeo(int numconst)

Añade para su representación el perigeo a la órbita correspondiente (numconst).

meterPlano(int numconst)

Añade para su representación el plano de la órbita correspondiente (numcontt).

III.3.1.2. Sin clases no funciona En este apartado se presentarán las clases creadas que dan soporte a los elementos más importantes que conforman el árbol: Las constelaciones, órbitas, satélites, estaciones y planetas.

53

Desarrollo de la aplicación •

Constelaciones

La clase Constelación es la encargada de crear constelaciones (conjunto de órbita-satélites-estaciones) con un determinado nombre, color y órbita y llevar la contabilidad de los satélites y estaciones asociados a ella. Se trata de un Nodo que inicialmente se crea con un nombre, color y órbita y al que posteriormente es posible añadirle satélites y estaciones terrenas. Para la identificación de los distintos elementos de la escena se emplea los colores. Todos los elementos que estén relacionados poseen el mismo color. Así la órbita, los satélites asociados a ella y las estaciones asociados a estos satélites poseen el mismo color, el cual es tomado del que la clase Constelación asigna en su creación. Tal tarea la realiza el método GenerarColor: ColorRGBA GenerarColor(float transp)

De forma aleatoria genera un trío de colores con cierta transparencia (transp) y es asignada a la constelación.



Órbitas

La clase Orbita crea las órbitas de la aplicación. Cada objeto de este tipo creado tiene los siguientes datos: Variables Semieje mayor Semieje menor Excentricidad Inclinación Argumento Perigeo Ascensión Recta Altura Apogeo Altura Perigeo Periodo Orbital Nombre

54

Desarrollo de la aplicación Tipo de órbita Color Matriz de Rotación para el cambio de coordenadas orbital-inercial.

Dicha matriz se calcula siguiendo los pasos determinados en el capítulo uno. Estado Orbita. Si la órbita es válida.

Objeto Line que es la geometría usada para la representación de la

órbita en 3D. Para su creación es necesaria una matriz de puntos que determina su forma. Métodos Orbita(String sem, String exc,

Constructor que inicializa el objeto Orbita creado

String incl, String argperi,String asignándole valor a todas las variables antes ascrect )

mencionadas.

double calcper()

Calcula la altura del perigeo

double calcapog()

Calcula la altura del apogeo

Vector3f[] GenerarElipse(int

Crea una matriz de vectores de posición de los

precision)

distintos puntos de la trayectoria de la órbita. La variable precisión sirve para determinar el número de puntos de la trayectoria. Esta matriz es la empleada para la construcción del objeto 3D representable en la escena.

int OrbitaValida()

Devuelve un código que identifica la validez de la órbita: -

ORB_OK. Órbita válida

-

ORB_CRASH. Órbita choca con Tierra

-

ORB_ALLEN. Órbita coincide con el cinturón de Van-Allen. Los cinturones de radiación de Van Allen son áreas de la alta atmósfera que rodean la Tierra donde hay una

alta

concentración

de

partículas

atómicas (electrones y protones). Su delimitación no está aún completamente

55

Desarrollo de la aplicación confirmada, ya que la actividad solar y el magnetismo generan oscilaciones en sus límites, que actualmente se denominan zonas de radiación. La intensidad de radiación presente en los cinturones de Van Allen produce un elevado

deterioro

de

los

circuitos

electrónicos y paneles solares de las naves espaciales, mientras que el efecto de una exposición sobre los seres vivos resulta extremadamente dañino. Se consideran 2 cinturones cuyas alturas son: 1º: 1600-5000 Km. 2º: 15000-20000 Km. -

ORB_BAD. Órbita no válida por otras razones. Valor por defecto hasta que es comprobada.

String TipOrbita()

Devuelve el tipo de órbita analizada. Los tipos que se reconocen en función de los ejes de la elipse que conforman la órbita son los siguientes: Tipo

Alturas (A.) eje mayor-menor (Km.)

Geoestacionaria

35795

LEO

1500-500

SSO

900-600

MEO

6000-11000

HEO

A. al apogeo: 50000-40000 A. al perigeo: 1000-500

DESCONOCIDA

Otras

ColorRGBA

Devuelve un color en formato RGBA (Red, Green,

GenerarColor(float transp)

Blue y Alpha). Este color es obtenido de forma aleatoria.

56

Desarrollo de la aplicación String nombrar(String

Devuelve el nombre que se le asigna a la órbita.

sem,String exc, String

Este nombre es el resultado de concatenar a la

incl,String argp,String ascrec)

palabra

Orb

el

valor

del

semieje

mayor,

excentricidad, inclinación, argumento del perigeo y ascensión recta.



Satélites

La clase Satelite define los objetos satélites con sus datos y geometría para su representación en la escena. Cada objeto de este tipo creado tiene los siguientes datos: Variables Nombre. Es el resultado de concatenar a la palabra Sat el número de

satélite que se trata. Por ejemplo si es el segundo satélite de una determinada constelación su nombre es: Sat2. Código. Valor para identificar el satélite constituido por el valor de su

tiempo de paso por el perigeo y el valor del momento en el que se tomó la medida. Velocidad angular. Color. Tiempo de paso del perigeo. Posición inicial del satélite.

Objeto Sphere. Los satélites son representados mediante esferas de colores. Órbita a la que pertenece el satélite. Anomalía media. Anomalía excéntrica. Angulo respecto a su eje x en coordenadas orbitales. Estación asociada al satélite. Punto subsatelital asociado al satélite. Objeto aparte definido en la

clase PtoSubSat. Donde sólo se definen métodos para su localización.

57

Desarrollo de la aplicación Métodos Satelite(Orbita orb,

Constructor de la clase. Crea un satélite

JFormattedTextField tp, String

inicializando todas las variables antes descritas,

name,JFormattedTextField time)

empleando los datos de órbita (orb), tiempo de paso por el perigeo (tp), nombre del satélite (name) y tiempo en el que se tomaron las medidas (time).

Satelite(Orbita orb, String name,

Constructor similar al anterior, empleado para

JFormattedTextField lon,

crear satélites en los que los parámetros

JFormattedTextField time)

relacionados con perigeo carecen de sentido: órbitas circulares. El parámetro lon es la longitud del satélite.

codigo(JFormattedTextField tp,

Crea el código que identifica a un satélite dentro

JFormattedTextField time)

de una constelación.

double

Calcula la anomalía media. Según pasos teóricos

CalcularM(JFormattedTextField

descritos en el capítulo I.

tp, JFormattedTextField time) double calculaE(double e, double

Calcula la anomalía excéntrica. Parámetros:

M)

excentricidad, e y anomalía media M.

double calcular0(double E, double

Devuelve el valor de r inicial en polares r0 del

e, double a)

satélite.

ouble calculaphi0(double erre0,

Devuelve el valor del ángulo inicial phi0 del

double e,double a,double E)

satélite.

Vector3f CoordSat(double r0,

Devuelve el vector posición inicial del satélite en

double phi0)

coordenadas

orbitales

a

partir

de

sus

coordenadas polares calculadas con los métodos anteriores.



Estaciones

La clase Estacion define los objetos estaciones terrenas con sus datos y geometría para su representación en la escena. Cada objeto de este tipo creado tiene los siguientes datos:

58

Desarrollo de la aplicación Nombre que identifica la estación. Longitud y latitud de la estación.

Objeto Box. Las estaciones son representadas mediante cubos de colores. Referencia a los ángulos de elevación y azimut a su satélite asociado. Métodos

Estacion(JFormattedTextField Constructor de la clase. Crea una estación,



t_longitud,

colocando una caja en las coordenadas

JFormattedTextField

proporcionadas como parámetros: t_longitud,

t_latitud, String nombre)

t_latitud.

Planeta – Tierra

La clase Planeta define los objetos estaciones terrenas con sus datos y geometría para su representación en la escena. Cada objeto de este tipo creado tiene los siguientes datos: Variables Vrotacion. Expresado en horas que tardar en dar una vuelta sobre sí mismo. Textura: Imagen que representará el aspecto del planeta. Radio: Radio del planeta. Nombre. Identifica el astro.

Objeto Sphere. Los planetas son representados mediante esferas con radio y textura definidos. Métodos Planeta

(Renderer

render, Constructor de la clase Planeta. Crea un planeta.

String name, float radio, float Crea una esfera con el nombre, radio y textura radioat, String tex, double vrot)

proporcionada como argumentos del constructor.

59

Desarrollo de la aplicación

III.3.2. Interfaz de usuario La estructura jerárquica que sigue el árbol que constituye la interfaz de usuario es la que se muestra en la siguiente:

Figura III.3.2.1. Diagrama interfaz usuario La gestión de toda la interfaz de usuario se hace con la clase GestorGUI. En ella se crea el nodo que será el nodo raíz de toda la interfaz: GUI. Todos sus hijos, excepto el panel de análisis del radioenlace, son JMEDesktops, nodos especiales pensados para emplear paneles swing tradicionales en las escenas de jME. El panel de análisis del radioenlace difiere de sus “hermanos” debido a su funcionalidad totalmente diferente del resto. Por lo que se ha implementado como una ventana swing tradicional,

60

Desarrollo de la aplicación resaltando el carácter modular de la aplicación ya que este módulo puede ser empleado de manera separada al resto de la aplicación sin más que crear una clase con su método main que instancia el panel creado.

III.3.2.1. En el interior de GestorGUI Para conseguir gestionar el nodo GUI, del que descienden todos los paneles que conforman la interfaz de usuario se implementa GestorGUI. Desde el nodo GUI se controlan los paneles, para por ejemplo saber si se deben mostrar u ocultar. Esta clase dispone de una serie de variables y métodos que hacen posible su tarea. Variables

Nodo GUI. Nodo raíz. Lista de JMEDesktops con todas sus referencias. Lista de paneles swing con referencia a sus implementaciones. Métodos

GestorGUI(InputHandler input, Renderer

Constructor. Crea el nodo GUI y todos los

render)

JMEDesktops, inicializando las principales variables.

JMEDesktop crearJMEDesktop( String

Crea un objeto JMEDesktop con un cierto

name, int width, int height, InputHandler

nombre,

input,JPanel panel)

aspecto (panel).

void quitarJMEDesktop(String name,

Elimina el JMEDesktop cuyo nombre es name

Node padre)

del nodo padre.

CrearPaneles()

Crea

dimensiones

todos

los

(width,

height)

JMEDesktops

con

y

sus

dimensiones, ubicaciones y aspectos.

Node añadirJMEDesktop(JMEDesktop d,

Añade el JMEDesktop d, asignándole el

String name, int x , int y, Node parent)

nombre name y ubicación x,y al nodo parent.

propiedadesJMEDesktop(Spatial nodo,

Asigna

Renderer re, int transparencia)

elemento nodo.

setCoorDesktop (int x, int y, JMEDesktop

Establece las coordenadas del JMEDesktop en

d)

pantalla. X, Y representan el punto donde se

61

propiedades

de

transparencia

al

Desarrollo de la aplicación colocará el centro del JMEDesktop

Node getGUIScene()

Devuelve una referencia al nodo principal GUI

LinkedList getDesktop()

Devuelve la lista de JMEDesktops

LinkedList getPanel()

Devuelve la lista de paneles swing.

III.3.2.2. Paneles Como se ha comentado antes, la interacción del usuario en el entorno 3D se realiza a través de los JMEDesktops cuya apariencia se define a partir de paneles swing. Para la creación de esos paneles se ha implementado siete clases que definen el entorno y los métodos que controlan las interacciones del usuario con sus elementos. Los nombres de dichas clases y el panel que representan son: Panel_ppal – Panel principal. Panel_Orbitas – Panel para introducir los datos orbitales. Panel_Escena – Panel para controlar el movimiento y elementos visibles de la escena

3D. Panel_Elementos – Panel para seleccionar elementos a representar y/o ver su

información. Panel_Info – Panel para mostrar información. Panel_Conf – Panel para modificar parte del entorno 3D. Panel_help – Panel para mostrar dibujo aclaratorio de los parámetros orbitales. Panel_Analisis – Panel para realizar el estudio de un radioenlace vía satélite.

III.3.2.2.1. Panel principal Esta formado por cinco botones para acceder a las partes principales de la aplicación. La clase que define este panel es Panel_ppal. Se trata de un panel (JPanel 6) con los elementos mencionados y donde se controlan los eventos de pulsación del ratón y paso del ratón por encima de los botones, para conseguir el efecto de movimiento de los botones al pasar el ratón por los botones. 6

Véase ayuda de Java

62

Desarrollo de la aplicación

Figura III.3.2.2.1. Esquema del panel principal Al pulsar sobre los botones “Representación”, “Análisis radioenlace” y “Configuración” muestran u ocultan el panel correspondiente en la escena. Al pulsar sobre el botón “Ayuda” abre el navegador por defecto del equipo para visualizar la ayuda. El botón “Salir” es empleado para cerrar la aplicación.

III.3.2.2.2. Panel órbitas La principal función de este panel es la de poder introducir los datos necesarios para poder crear las órbitas, satélites y estaciones terrenas que se desean. Inicialmente presenta un aspecto compacto ocultando los elementos no necesarios. El esquema que presenta es el mostrado en la siguiente gráfica, donde a su derecha se enumeran las funciones de los botones que constituyen el panel.

63

Desarrollo de la aplicación

Figura III.3.2.2.2. Esquema del panel órbitas Las zonas A y B son los espacios donde están las casillas donde introducir los datos. Estas casillas no son JTextField convencionales sino JFormattedTextField los cuales permiten definir máscaras, rangos y tipos de valores admisibles, mucho más versátil y útil. De esta forma se controla la entrada de datos válidos en la aplicación.

III.3.2.2.3. Panel escena Formado por seis botones, permiten controlar los paneles que se desean estén visibles, el aspecto de la Tierra (textura que simule su aspecto natural o textura con los meridianos y paralelos), mostrar el sistema de ejes inercial del sistema y activar o desactivar el movimiento de los elementos del espacio 3D. El esquema de este panel y la función de cada botón es el mostrado en la siguiente figura:

64

Desarrollo de la aplicación

Figura III.3.2.2.3. Esquema del panel escena

III.3.2.2.4. Panel elementos Se trata de uno de los paneles más complejos de la aplicación. Permite representar y borrar todos los elementos creados, mostrar una serie de ítems asociados a esos elementos y mostrar información relativa a los elementos seleccionados. En la siguiente figura se muestra un esquema de su composición. Este panel está dividido en dos zonas, A y B. La zona A es donde se muestra en forma de árbol las órbitas y satélites creados desde el panel de órbitas. Esta zona consta de una parte donde se muestra el árbol (A1) con todos los elementos, una casilla (A2) donde se muestra el color con el que se representa el elemento seleccionado y un botón (A3) que cambiará: inicialmente y cada vez que se añada elementos aparecerá el botón con texto “Actualizar” que revisará la estructura de elementos creada y actualizará el árbol de representación. Tras esto cambiará aparecerá en su lugar el botón con texto “INFO”, al pulsarse mostrará el panel de información con los datos del elemento seleccionado. La zona B no es visible hasta que se haya actualizado el árbol con todos los elementos. Consta de 6 botones, enumerados desde B1 hasta B6 con las siguientes funciones:

65

Desarrollo de la aplicación B1: Muestra todos los elementos (órbitas y satélites) que aparece en el árbol (A1). Su selección es el paso previo necesario para acceder a otras funcionalidades de esta zona como la selección del botón B5. B2 y B3: Muestran u ocultan la representación de la elevación y azimut del satélite seleccionado. La obtención de esta representación es en ambos casos muy similar. El resultado de esta representación da además de los ángulos antes mencionados un conjunto de líneas útiles para su representación y comprensión. La representación de todas esas líneas (son objetos Line de jME) se basan en generar matrices con los vectores de posición de los puntos que las forman. Así conociendo el punto inicial y final y empleando coordenadas esféricas en este caso por ser más intuitivas y fáciles de usar se obtiene las matrices buscadas. Tanto la obtención de esos puntos iniciales y finales como de la elección de puntos a tomar son realizadas por métodos de BasicSpace3D. Estos botones tienen la particularidad que para mostrar los ángulos de elevación o azimut de otros elementos se debe volver a pulsar para borrar la representación anterior. Sólo es posible realizar la representación de estos ángulos de un elemento de la escena. B4: Muestra u oculta el plano orbital si se ha seleccionado una órbita o satélite o el plano ecuatorial si es el nodo Tierra el seleccionado. B5: Muestra u oculta el punto del perigeo de la órbita seleccionada. En caso de ser una órbita sin excentricidad se muestra un mensaje de advertencia. B6: Elimina todo el contenido de la escena 3D y borra las listas con los datos anteriormente introducidos de órbitas, satélites y estaciones.

66

Desarrollo de la aplicación

Figura III.3.2.2.4. Esquema panel de elementos

III.3.2.2.5. Panel de información Formado por tres botones para seleccionar la información deseada de un tipo de elemento particular y una zona común para mostrar dicha información. La función de los botones colocados en su parte inferior es la de mostrar u ocultar la información deseada. La información que aparece es tomada de las variables internas de los objetos creados por las clases Orbita, Satelite y Estacion y actualizada continuamente por el método ActualizarInfo.

67

Desarrollo de la aplicación

Figura III.3.2.2.5. Esquema panel de información

III.3.2.2.6. Panel de configuración Se trata de un panel muy simple para configurar dos aspectos de la escena 3D: la luz y el fondo. Para esta tarea hay dos JToggleButton se tratan de botones que en función de su estado pulsado si/no realizan una función u otra. Para el cambio de luces del escenario lo que se hace es conmutar entre dos estados de luces creados en BasicSpace3D: un estado formado por una luz direccional y el otro por seis luces.

Figura III.3.2.2.6. Esquema panel de configuración

68

Desarrollo de la aplicación

III.3.2.2.7. Panel ayuda rápida Implementado con la clase Panel_help, no se debe confundir con la ayuda HTML accesible desde el panel principal, este panel es una ayuda para identificar rápidamente los parámetros orbitales. Está compuesto por un dibujo que muestra los parámetros gráficamente para una rápida interpretación de los mismos.

III.3.2.2.8. Panel de análisis del radioenlace Este panel a simple vista proporciona la falsa impresión de no haber sufrido cambios, debido a su similitud de aspecto con respecto a los proyectos anteriores, pero bajo esa apariencia inalterada esconde importantes modificaciones. En una sola ventana se ha incluido todo lo necesario para el análisis de un radioenlace, prescindiendo de multitud de ventanas emergentes para introducir los datos de las anteriores versiones. El esquema del nuevo aspecto que presenta esta ventana es el mostrado en la siguiente figura:

Figura III.3.2.2.8. Esquema panel análisis del radioenlace En esta revisión se ha dotado de mayor precisión e interactividad con el usuario al apartado de representación de gráficas. Se ha rediseñado internamente obteniendo una herramienta de uso genérico, que se puede emplear tanto para el objetivo de esta 69

Desarrollo de la aplicación aplicación como, por ejemplo, para representar funciones trigonométricas como senos. A continuación se describe la solución adoptada, basada en una idea encontrada en www.chuidiang.com 7 perfeccionada y preparada posteriormente para este proyecto. La zona donde se representan las gráficas es el resultado de la implementación de una clase que extiende de canvas 8, que llamaremos lienzo. Este lienzo admite como elementos especiales: una escala, objetos gráficos y observadores de ratón.

La escala Un problema normal en los gráficos es que nosotros queremos dibujar un gráfico con unas determinadas coordenadas (de usuario), por ejemplo, una función matemática sin(x) va de 0.0 a 2*PI en el eje x y de -1 a 1 en el eje y, mientras que los ordenadores nos ofrecen las coordenadas en píxel. Para realizar esta función, está la interface EscalaGrafica con métodos de pintado de Graphics. Una clase hija EscalaGraficaCartesiana implementa estos métodos, pero haciendo la transformación de coordenadas. De esta forma, si en vez de dibujar directamente con Graphics, dibujamos con EscalaGraficaCartesiana, no debemos preocuparnos de transformar coordenadas de usuario en píxel. EscalaGraficaCartesiana se inicializa pasándole cuales queremos que sean las coordenadas límite de nuestro gráfico. De esta forma, puede hacer las cuentas para transformar las coordenadas nuestras en píxel. EscalaGrafica escala = new EscalaGraficaCartesiana(); escala.tomaExtremos (0.0, -1.0, 2*Math.PI, 1.0);

Los objetos gráficos La interface ObjetoGrafico posee un único método dibujate(), que recibe una EscalaGrafica. Cualquier cosa que queramos dibujar debería ser una clase que 7

En el mundo Java es posible encontrar multitud de recursos de personas que los facilitan de forma desinteresada, a todos ellos les doy mis más sinceros agradecimientos. 8 Véase ayuda de Java.

70

Desarrollo de la aplicación implemente esta interface. En el método dibujate() debe dibujar lo que se quiera dibujar, pero siempre en coordenadas de usuario. No debemos preocuparnos de transformar a píxel. En nuestra aplicación se emplean varios ObjetoGrafico, creados y listos para utilizar: •

RejillaFija, dibuja una rejilla sobre nuestra área de dibujo, poniendo números en las coordenadas.



FuncionAbstracta, dibuja cualquier función matemática del estilo y=f(x). Hay que heredar de ella y redefinir el método funcion(), que devuelve la y en función de la x. Precisión de 500 puntos.



CNvsBw, dibuja la gráfica relación CN frente ancho de banda, pasándole la potencia transmitida, temperatura de ruido y el ancho de banda.



CNvsFrec, dibuja la gráfica relación CN frente a la frecuencia, pasándole los datos del enlace con pérdidas.



CNvsTemp, dibuja la gráfica relación CN frente temperatura, pasándole la potencia transmitida, el ancho de banda y la temperatura de ruido.



PotvsDi, dibuja la gráfica potencia recibida frente directividad, pasándole los datos del enlace incluidas las pérdidas.



PotvsFrec, dibuja la gráfica potencia recibida frente frecuencia, pasándole los datos del enlace con las pérdidas incluidas.



PotvsR, dibuja la gráfica potencia recibida frente la distancia, pasándole los datos del enlace incluidas las pérdidas.

Los observadores de ratón La interfaz ObservadorRaton posee el método eventoRaton(), al que se le pasa el evento de ratón y las coordenadas x, y de usuario en las que se ha producido el evento. El método debe devolver true si el tratamiento del evento hace que se necesite un repintado del gráfico y false en caso contrario.

71

Desarrollo de la aplicación Empleando esta interfaz se emplean varios ObservadorRaton: •

VisorRaton, que es un JTextField en el que se puede ver la coordenada x o y por donde se mueve el ratón, en coordenadas de usuario.



Clase Cursor, que sirve de padre para CursorHilo y CursorZoom. El primero es una línea vertical, horizontal o ambas a la vez que se mueven con el ratón, permitiendo marcar dos posiciones, usando botón izquierdo y derecho del ratón. El segundo hace que se dibuje un rectángulo según arrastramos en el gráfico con el ratón, y al terminar hace zoom de la zona en el rectángulo.



Mano, que sirve para poder arrastrar un gráfico con el ratón.

El lienzo de dibujo El Lienzo tiene dos capas de dibujo, para poder hacer un dibujo de fondo y otro por encima que normalmente es algún tipo de cursor que se mueve con el ratón. Este Lienzo se inicializa pasándole la EscalaGrafica que queramos (con sus límites de las coordenadas de usuario). Admite que le añadamos todos los ObjetoGrafico que queramos. El Lienzo, cuando necesite repintado, llamará a todos los dibujate() de los ObjetoGrafico que tiene en su interior y presentará el dibujo en pantalla. Lienzo lienzo = new Lienzo(); lienzo.tomaEscala (escala); PotvsFrec potfre = new PotvsFrec(nlace.valorfrec, nlace.valorptx, nlace.valordtx, nlace.valordrx, nlace.valorr, nlace.ltx, nlace.lrx, nlace.lpolariz, nlace.lapunta, nlace.lgases, nlace.llluvia, nlace.lnubnieb, Color.GREEN); lienzo.tomaObjetoGrafico(potfre);

72

Desarrollo de la aplicación

III.4. Ayuda Totalmente independiente a la aplicación que está escrita en Java se ha implementado un manual para el manejo del simulador en formato HTML. Presenta una sencilla e intuitiva estructura buscando un fácil manejo. Su esquema es el mostrado en la siguiente figura:

Figura III.4.1. Esquema de la ayuda Se trata de una página Web optimizada para ser visualizada a una resolución de pantalla de 1024x768. Su diseño ha sido dividido en tres partes diferenciadas: el menú, los enlaces rápidos y la información. El menú.

Escrito en javascript, proporciona acceso a través de menús y submenús a los distintos apartados y sub-apartados de la ayuda. Es de manejo intuitivo: basta con pulsar en el menú sobre el apartado deseado para que muestre, si tiene, subapartados asociados para poder seleccionarlos. Enlaces rápidos.

Conjunto de iconos que representan el apartado al que dan acceso. La información.

El contenido de la ayuda, dividida en apartados y escrita en archivos HTML.

73

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.