Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
CASO DE ESTUDIO: APLICACIÓN DEL
MOVIMIENTO PARABÓLICO
Angry Birds
1. ENUNCIADO
Desarrolle un Algoritmo donde se calcule la velocidad de lanzamiento necesaria para
que un Angry Bird lanzado desde el piso con una inclinación de 45° sobrepase un
objetivo dispuesto a 503 metros de distancia, tomando en cuenta que se rige mediante
el cálculo del movimiento parabólico. Tenga en cuenta lo siguiente:
● El cálculo de la velocidad no debe hacerse por despeje de formula.
● Usted debe probar con distintos valores de velocidad hasta: lograr sobrepasar el
objetivo de 503 metros, lograr el objetivo después de un X número de intentos, o
continuar probando distintos valores de velocidad hasta que ya no quiera seguir con
las pruebas.
Contexto del caso:
Desde tiempos inmemoriales el ser humano usa la ciencia para dominar el entorno, sus
amigos o enemigos, desde la carrera armamentista en la antigüedad hasta los juegos
en nuestros teléfonos y tabletas de hoy, el cálculo rápido del movimiento parabólico es
fundamental.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
Movimiento parabólico
Es el realizado por un objeto cuya trayectoria describe una parábola. Se corresponde con la
trayectoria ideal de un proyectil que se mueve en un medio que no ofrece resistencia al
avance y que está sujeto a un campo gravitatorio uniforme. Tomado de Wikipedia
Para entender mejor el ejercicio se debe abstraer la solución, simplificando los datos
que se extraen de la información inicial, señalando el plano ( x, y ) donde se realizará el
movimiento.
Describiendo el sistema físico mediante el siguiente esquema:
Simplificando los datos se tiene un ángulo ( θ )
, una distancia recorrida
Rnecesaria
para acertar el lanzamiento y se debe buscar la velocidad de lanzamiento necesaria.
Para realizar el proceso es necesaria una ecuación que calcula la distancia máxima en
el plano x alcanzada por el Angry Bird ( proyectil ) o como se ve en la gráfica R, por lo
general la gravedad se define como 9.8 m/s, quedando la ecuación así:
v02
R= g sin 2θ
Se lee así: R es igual a la velocidad inicial del proyectil al cuadrado, dividido por la
gravedad, el resultado se multiplica por el valor del seno de dos veces el ángulo de
lanzamiento.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
2. ESTRUCTURA DE DATOS
En este punto entonces es necesario considerar qué información debe ser definida al
iniciar el algoritmo y cuál debe ser introducida por el usuario.
En la siguiente tabla se define el uso, el nombre de la variable y el valor inicial que
debería tener cada una de estas variables:
Explicación de la variable Variable Valor inicial
Distancia necesaria recorrida distancia_objetivo 503
Distancia alcanzada por el proyectil distancia_alcanzada 0
Constante de gravedad en la tierra gravedad 9.8
Ángulo de lanzamiento angulo 45
Variable introducida por el usuario que servirá velocidad 0
para guardar el valor de la velocidad necesaria
de lanzamiento
Velocidad inicial a evaluar velocidad_inicial 0
Velocidad final a evaluar velocidad_final 0
Como deseamos encontrar la velocidad ideal del lanzamiento, más adelante en el
ejercicio se explica cómo se inicializan estas variables y que opciones tenemos.
3. REQUERIMIENTOS FUNCIONALES
RF1. El Algoritmo debe calcular e imprimir la distancia máxima que alcanza el Angry
Bird al ser lanzado.
RF2. El programa debe solicitar al usuario al menos 5 veces las velocidades de
lanzamiento para realizar los cálculos.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
4. REQUERIMIENTOS INSTRUCCIONALES
A. ANÁLISIS
Este tipo de algoritmos básicamente realizan operaciones matemáticas simples, la
ecuación que se debe transformar en un algoritmo y describe el movimiento es:
v02
R= g sin 2θ
En la anterior ecuación es necesario el reemplazo de los valores por las variables
previamente definidas.
B. DISEÑO
Se puede implementar el algoritmo de diversas maneras, una de ellas práctica y
funcional, es despejar la velocidad inicial del lanzamiento para calcular el valor exacto
o mayor necesario para sobrepasar el objetivo, pero este no es nuestro caso. Para
este ejercicio, se van a pedir valores sucesivos de velocidad, cada valor de velocidad
va a ser probado en la fórmula, y se va a calcular un valor de distancia, distancia que
va a ser comparada con el valor objetivo, y con base en esto se va a emitir un juicio
que indicará si no se alcanzó, o se sobrepasó el objetivo.
De está manera el cálculo de la velocidad de lanzamiento se realiza mediante la
solicitud al usuario de la velocidad inicial, se realiza la operación y se compara en cada
oportunidad, para esto el usuario debe escribir una velocidad diferente muchas veces
hasta cumplir el objetivo del ejercicio.
Otra manera de realizarlo es pidiendo que el usuario escriba un rango de velocidades y
el algoritmo las evalúe una a una, sin interacción alguna y en caso de que la velocidad
o velocidades requeridas sean parte de ese rango se imprimen los resultados
correspondientes.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
C. IMPLEMENTACIÓN
Las variables es lo primero que un algoritmo debe definir:
distancia_objetivo = 503;
distancia_alcanzada = 0;
gravedad = 9.8;
angulo = 45;
velocidad_inicial = 0;
velocidad_final = 0;
velocidad = 0;
Usando las variables previamente definidas podemos describir la ecuación como un
algoritmo de la siguiente forma:
distancia_alcanzada = ( ( velocidad* velocidad ) / gravedad ) *
sin
(2*angulo)
En este punto reemplazamos la ecuación con sus respectivas variables, el detalle
faltante es como calcular el SENO de un ángulo, para esto se deben usar funciones
trigonométricas por lo tanto es necesario decirle a C++ que debe importarlas y así,
trabajar con ellas. En la cabecera, al inicio del algoritmo y código fuente se debe
adicionar:
#include <cmath>
Con esto disponemos de una gran cantidad de funciones predefinidas, por el momento
nos interesa profundizar sobre una de ellas:
sin() : calcula el seno de un ángulo, estos valores deben estar en radianes.
Para pasar de grados a radianes, define una constante , al inicio del algoritmo y código
fuente así:
#define PI 3.141592654
La fórmula del paso grados a radianes entonces sería:
angulo*PI/180
La fórmula quedaría así:
distancia_alcanzada=((velocidad*velocidad)/gravedad)*sin(2*(angulo*PI/180));
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
Con estas funciones se facilita el cálculo de la ecuación usada para encontrar la
distancia X máxima recorrida.
Ahora, si se integra todo en un algoritmo completo:
#include <iostream>
#include <cmath>
#define PI 3.141592654
using namespace std;
int main()
{
float distancia_objetivo, distancia_alcanzada;
float velocidad_inicial, velocidad_final, gravedad, angulo, velocidad;
char continuar;
distancia_objetivo = 503;
distancia_alcanzada = 0;
gravedad = 9.8;
angulo = 45;
velocidad = 0;
velocidad_inicial = 0;
velocidad_final = 0;
continuar = 's';
while(continuar=='s' || continuar=='S')
{
cout<<"\nPor favor indica una velocidad para probar:";
cin>>velocidad;
distancia_alcanzada=((velocidad*velocidad)/gravedad)*sin(2*(angulo*PI/180));
out<<"\nLa distancia alcanzada fue de: "<<distancia_alcanzada;
c
if (distancia_alcanzada >= distancia_objetivo)
cout<<"\nSe sobrepaso el objetivo, velocidad de "<<velocidad;
else
cout<<"\nNO se sobrepasó el objetivo";
cout<<"\n\nDesea continuar? s/n:";
cin>>continuar;
}
cout<<"\n\nHasta la proxima!\n\n";
return 0;
}
D. PRUEBAS
El programa deberá entregar como resultado el valor de la velocidad de lanzamiento
necesaria para golpear el objeto a la distancia deseada.
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
Si probamos velocidad por velocidad, escribiendo 50, 70 y 80 como valores posibles de
velocidad:
Por favor indica una velocidad para probar:60
la distancia alcanzada fue de: 367.346938776
NO se sobrepasó el objetivo
Desea continuar? s/n:s
Por favor indica una velocidad para probar:70
la distancia alcanzada fue de: 500.0
NO se sobrepasó el objetivo
Desea continuar? s/n:s
Por favor indica una velocidad para probar:80
la distancia alcanzada fue de: 653.06122449
Se sobrepasó el objetivo, con una velocidad de 80.0
Desea continuar? s/n:n
Hasta la próxima!
En este ejercicio es necesario lanzar el Angry Bird a más de 80 m/s para sobrepasar el
objetivo, se tiene la sensación de es tedioso incluir valor por valor ¿no?, ahora
intentaremos entregándole al algoritmo un rango para evaluar las velocidades, por
ejemplo, velocidad inicial de 60 y velocidad final de 80, el algoritmo probará 60, 61, 62,
etc.
Por favor indica una velocidad inicial para probar:60
Por favor indica una velocidad final de la prueba:80
la distancia alcanzada fue de: 367.346938776
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 379.693877551
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 392.244897959
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 405.0
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 417.959183673
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 431.12244898
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 444.489795918
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 458.06122449
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 471.836734694
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 485.816326531
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 500.0
NO se sobrepasó el objetivo
la distancia alcanzada fue de: 514.387755102
Se sobrepasó el objetivo, con una velocidad de 71
la distancia alcanzada fue de: 528.979591837
Se sobrepasó el objetivo, con una velocidad de 72
la distancia alcanzada fue de: 543.775510204
Se sobrepasó el objetivo, con una velocidad de 73
la distancia alcanzada fue de: 558.775510204
Se sobrepasó el objetivo, con una velocidad de 74
la distancia alcanzada fue de: 573.979591837
Se sobrepasó el objetivo, con una velocidad de 75
la distancia alcanzada fue de: 589.387755102
Se sobrepasó el objetivo, con una velocidad de 76
la distancia alcanzada fue de: 605.0
Se sobrepasó el objetivo, con una velocidad de 77
Facultad de Ingeniería
Programa de Ingeniería de Sistemas
Programación I
CASO 3
la distancia alcanzada fue de: 620.816326531
Se sobrepasó el objetivo, con una velocidad de 78
la distancia alcanzada fue de: 636.836734694
Se sobrepasó el objetivo, con una velocidad de 79
Desea continuar? s/n:n
Hasta la próxima!
¿Desde que velocidad de tiro inicial se sobrepasa el objetivo planteado?
5. ENTREGABLES
a. Código fuente (AngryBirds-T000000.cpp)
b. El código fuente debe estar documentado.
c. Impresión del pantallazo con los datos de salida.