Diseño
y Programación Orientados a Objetos
1er. Sem 2011
Tarea 4: Bolas, Resortes y Ganchos Fijos como Objetos de Software en C++
Recomendación: Lea detenidamente la tarea. Si algo no lo
entiende, consulte en clases. Si es preciso, se incorporarán
aclaraciones al final.
Esta tarea tiene por objetivos:
* Reconocer clases y relaciones entre ellas en códigos fuente C++.
* Ejercitar el diseño e implementación de clases en C++.
* Ejercitar la entrada y salida de datos en C++
* Ejercitar la creación de archivos con extensión .csv y su importación a planillas electrónicas.
Descripción General
En esta tarea se modela la interacción objetos reales resortes,
bolas y ganchos fijos sujetos a las leyes de la "naturaleza". A partir de
estos modelos se construyen clases de software para crear objetos de
software que representarán a los objetos reales. En física usted
estudió la interacción de masas y resortes. Para calcular su dinámica, en esta tarea las masas
serán modeladas como masas puntuales. Decimos que este es un modelo y
no la realidad porque sabemos ninguna masa es puntual; sin embargo,
esta suposición simplificará nuestro planteamiento y nos permitirá
obtener resultados con precisión satisfactoria para nuestros fines. Los
resortes serán modelados sin masa y cumplirán la ley de Hooke
sin límite de elasticidad, es decir, Hooke vale en todas las
extensiones del resorte. Los ganchos sirven para fijar extremos de
resortes en puntos del espacio. Estos objetos están inmersos en un
campo de gravedad constante y con una fuerza disipativa (roce de fluido)
que supondremos proporcional a la magnitud de la velocidad.
Una vez que las clases básicas estén definidas, usted creará
instancias de bolas, resortes y ganchos; luego los conectará para formar
un experimento a simular. Notar que aquí aparece otro actor:
un
simulador. El simulador no es más que el modelo del paso del tiempo, el
cual será informado a cada objeto. El tiempo avanzará en pasos
discretos en lugar de un continuo y así iremos avanzando en nuestra
simulación de a pasos
"pequeños" (deltas de tiempo). Para calcular la dinámica de masas sujetas a fuerzas externas, revise este material.
Esta tarea le pide construir configuraciones de bolas,
resortes (nunca dos bolas o resortes juntos) y ganchos fijos de cualquier tipo en R2. Un ejemplo de tales configuraciones se muestra en la Figura 1. Una vez que la configuración esté armada se inicia la
simulación por un tiempo definido por consola. Los resultados,
es decir las posiciones de los cuerpos en el tiempo, serán escritas en pantalla.
Luego usted debe importar sus datos en una planilla electrónica para
generar gráficos del movimiento de sus objetos.
Figura 1: Imagen de una configuración posible
Resultados Esperados de su Grupo
Su tarea debe ser compilable en aragorn usando:
$ make
Su tarea será ejecutada en aragorn usando:
$ make run [FILE=nombre del archivo de salida]
El uso de [..] significa uso opcional. Si se omite, el programa asume que la salida debe ser enviada a la pantalla.
Una vez iniciado, el programa pide por teclado algo del tipo:
Ingrese delta: <Aquí el usuario ingresa delta tiempo>
Ingrese tiempo a simular: <ingresa tiempo total de simulación>
Ingrese tiempo entre escrituras del estado del sistema en la salida: <tiempo de muestreo>
Luego el programa corre hasta generar toda la salida indicada. En archivo o en pantalla debería generar algo del tipo:
Time,Hook #0: (x,y),,Spring #0: (x0,y0),(x1,y1),,Ball #0: (x,y),,Spring #1: (x0,y0),(x1,y1),,Ball #1: (x,y)
0.0,0.0,3.0,,0.0,3.0,1.0,2.0,,1.0,2.0,,1.0,2.0,-0.3,0.2,,-0.3,0.2
/* aquí omito el resto de las líneas */
Para efectos de esta tarea, la salida sólo incluye las posiciones de cada objeto.
Usted deberá entregar los siguientes archivos:
- readme
- makefile
- Archivo de Documentación: éste incluye la Figura 2 y un gráfico (y,t)
que muestre la posición y de la bola colgante como función del tiempo
para 0<t<"tres periodos". Este archivo además debe
incluir el esquema de la
Figura 1 y un gráfico (X,Y) de la trayectoria del bola más alejado
del gancho desde
0<t<"tiempo a definir por usted", use los datos iniciales del
ejemplo de salida más arriba, ambas masa de 1 [kg] y en reposo;
constantes
elásticas iguales a 10 [N/m] y largos en reposo de 1.0 [m]; g=9.8 [m/s2]; fricción del aire de 0.5 [Ns/m]. Indique las dificultades
encontradas y cómo las resolvió. Si usted desea analizar otro caso,
puede hacerlo e incluirlo aquí.
Figura 2: Gancho a 3 [m] de altura, masa
de 1 [kg] y rapidez inicial cero, resorte de largo en
reposo de 1.5 y constante elástica 10; g=9.8 [m/s
2], sin fricción.
El gráfico para el experimento de la Figura 2 debería ser similar al de la Figura 3.
Figura 3: Gráfico para el experimento de la Figura 2.
Obviamente su programa no generará el dibujo ni el gráfico. Puede usar
el dibujo aquí incluido y el gráfico lo puede generar con una planilla
de cálculo a partir de los datos de salida de su programa.
Ayudas
* La
fuerza de fricción con el aire depende el aire y forma del cuerpo. En
esta tarea la modelaremos como proporcional a la velocidad del cuerpo
(es una aproximación válida cuando no hay turbulencias -caso
velocidades bajas). La constante de proporcionalidad la podemos modelar
de dos formas: como constante para todas las masas, o como el producto
de la viscosidad del aire por un factor que depende de la geometría de
cada cuerpo. Si usamos el primer enfoque, la Constante de Roce Viscoso
(viscous friction constant) , será un atributo más de MyWorld (similar
a g). Si usamos el segundo enfoque, podemos asociar la viscosidad del
aire a MyWorld y una constante "crossSection" (sección eficaz) a
cada masa. La Constante de Roce Viscoso en este último caso será el
producto de ambas (06.04.11).
* Dé una mirada a archivos make files usados en este tutorial y ejemplos vistos en clases.
* No dude en consultar al profesor o ayudante sobre dudas de esta tarea.