Por:
- Luis Fuentes
- Benjamín Ginouvès
En esta tarea se pretende dar una versión para la implementación de un laboratorio virtual donde pueda observarse un sistema que interactúa "casi" en tiempo real y con elementos físicos representados por objetos de software. La aplicación pretende dar una visión gráfica en dos dimensiones y con movimiento, de la interacción entre bloques, resortes y cuerdas con cierta elasticidad. La aplicación brinda la libertad de posicionar tanto los bloques como cuerdas y resortes de cualquier forma, con la restricción de no poder interconectar los extremos de resortes con cuerdas, restringiéndose a la conexión solamente a los bloques.
Se modela la interacción de objetos reales, cuerdas, resortes y bloques, de la naturaleza a partir de modelos que son representados en clases y objetos de software, que a su vez se presentan de forma gráfica para su fácil manipulación. Se implementa una ventana de trabajo con la clase JPanel, una barra de menú para las opciones de los objetos a insertar y las opciones de la simulación.
Las masas se representan como elipses con posibilidades de cambiar las dimensiones, valor de su masa y si deben quedar fijos dentro del panel de simulación. Los resortes se representan como líneas poligonales pudiendo desplazar sus extremos para vincular con cualquier bloque, pudiendo ingresar los valores de su largo y coeficiente al momento de crear el objeto físico, de igual forma pero representados como una línea, se insertan las cuerdas en la simulación. Para mayor simplicidad, tanto los resortes como las cuerdas sin masa se han considerado sin masa y cumpliendo con la ley de Hooke a lo largo de toda su extensión, donde la cuerda actúa de forma elástica al exceder el largo de ésta.
El sistema inicialmente se encuentra afectado por la gravedad y un factor de amortiguación de compensación con el objetivo de que la simulación, luego de un tiempo grande, no se escape de un movimiento físico sin efectos de roce o de otras fuerzas externas no consideradas influyentes en la simulación.
Se diseñan las cuerdas y resortes como objetos con posibilidades de conexión hacia los bloques solamente. Para los resortes y cuerda se pueden mover los extremos de forma independiente para conectar con cualquier bloque dentro del panel de simulación.
De esta forma el sistema de simulación es presentado en la figura 1.
Figura 1: Ventanas de selección de la barra de menú de los elementos físicos a insertar y de las opciones de la simulación.
Figura2: Menúes de selección de los atributos de los elementos físicos a insertar (a)Masa, b)Resorte y c)Cuerda.
Figura 3: Ejemplo del cambio en el tiempo de una simulación con 4 masas, 2 resortes y 2 cuerdas.
Dado que el código del programa está basado en el código entregado para una aplicación de bloques y cuerdas, sólo se comentan los cambios en el diseño de forma general y más importante, ya que la documentación del código se generará a partir del código fuente de la aplicación.
Se implementa clase MyString que extiende de la clase PhysicsElement, en la cual se escriben las instrucciones del nuevo elemento y reescribiendo las abstractas de la clase heredada. Esta clase es de comportamiento similar a un resorte para cuando su largo es mayor al largo especificado para ella, transformándose en una especie de elástico. Para la representación de estas cuerdas se ha creado la clase de objeto GString que hereda de MyString e implementa la interfaz Draggable, donde se implementan las acciones que se reciben de la interacción del mouse, para mover y modificar las conexiones de las cuerdas. Dentro de este bloque se calcula la fuerza ejercida por la cuerda al bloque ubicado en cada extremo de esta.
La clase Block se ha modificado para contener un arreglo adicional donde se indexan las cuerdas conectadas al bloque específico, y se ha agregado la variable fixed para indicar si es está fijo en la posición que el usuario a indicado, permitiendo generar uno o varios punto de apoyo de la simulación. Dentro de este bloque se llama a la función de cálculo de las fuerzas de los resortes y cuerdas que afectan al bloque, sumando el efecto de la fuerza de gravedad si se ha especificado.
La clase OptionPaneMultiple, se ha desarrollado como clase heredada de JFrame para la implementación del diálogo de consulta de las variables de los elementos físicos que se desean insertar en la simulación.
A continuación se representan las interfaces, implementación de la herencia, referencias, variables, etc. Que forman la estructura de la aplicación.
Figura 4: Diagrama de clases de la aplicación.
A continuación se muestra secuencia de invocaciones generadas al soltar el botón del mouse luego que se ha arrastrado el segundo extremo de una cuerda a un bloque, donde se ha omitido las clases de java ajenas a la tarea indicada.
Figura 5: Diagrama de secuencia de invocaciones generadas al soltar el botón del mouse luego que se ha
arrastrado el segundo extremo de una cuerda a un bloque.
Dentro de las conclusiones que podemos destacar en el trabajo de diseño y ejecución del programa, se desprende la implementación del factor gravedad y de amortiguamiento del sistema para que no se escapara de la realidad por el error producido en los cálculos de la fuerza, lo produjo cierta incertidumbre y dolores de cabeza para compensarlo.
El trabajo de selección de los extremos del resorte y la cuerda son difíciles de alcanzar, por el tiempo reducido para la entrega no se pudo desarrollar una solución a través del uso de un rectángulo invisible que ayudara en esto, lo que podría ser una mejora para la una versión posterior.
A través del desarrollo de esta aplicación de pequeño tamaño se pudo recabar experiencia y práctica en las funcionalidades del diseño orientado a objetos, permitiendo el trabajo en equipo y el desarrollo de documentación dentro del código, que a veces no es una de las cosas que más dificil se presenta a los programadores, pero que entregan las bases para aplicaciones más complejas.