sábado, 15 de junio de 2013

Alcance del tiro parabólico


Este programa sigue en la misma línea del anterior. Se trata de resolver problemas tipo y típicos mediante un programa que espera unos datos numéricos introducidos por teclado. La máquina hace todas las operaciones necesarias y proporciona las ecuaciones adecuadas. Este de hoy es un problema clásico: se trata de determinar el alcance de un disparo parabólico a partir de la velocidad inicial y de la inclinación sobre el suelo. Para resolverlo se descompone la velocidad inicial en dos componentes: la velocidad horizontal y la vertical. Contra esta trabaja la gravedad. De esta forma obtenemos dos ecuaciones para el desplazamiento: sy=vy*t + ½g*t²  y   sx=vx*t, siendo sy y sx los desplazamientos vertical y horizontal. Teniendo en cuenta que g es negativa en el ascenso y que cuando el proyectil llega al suelo sy=0 obtenemos una ecuación de 2º grado que resolvemos para t. Una vez obtenido t resolvemos la segunda ecuación para obtener sx.
Combinando estos cálculos llegamos a la fórmula sintética, que también podemos emplear: 
sx= v²*sin(2a)/g.
En esa fórmula podemos ver dos cosas: que el alcance depende fuertemente de la velocidad inicial y que es máximo para 45º, pues seno(2*45) = seno (90) = 1. También podemos derivar respecto a  'a', sx' = v²/g cos(2a) y ver que para a=pi/4  cos(pi/2)=0, marcando el máximo de la primitiva.
P.D. He añadido una linea al programa para calcular la altura máxima que alcanza el proyectil en su movimiento parabólico. La fórmula es sy=v²*sin²(a)/2*g.
Esta fórmula se puede obtener fácilmente derivando respecto de t  sy=v*sin(a)*t + ½g*t² e igualando a cero. Obtenemos t=2*v*sin(a)/g. Sustituyendo este valor de t en la función sy obtenemos la fórmula.


#include<iostream>
#include<cmath>
#define g 9.81
#define pi 3.14159265
using namespace std;
int main()
{
//Variables
double v,vx,vy; //velocid. inicial, componentes de la velocidad.
double a,sx,t; //ang. inclin.,distancia horiz.,tiempo empleado
cout<<"\n\tCalcular el alcance de un proyectil lanzado con una velocidad \n";
cout<<"\tinicial 'v' y con un angulo de inclinación sobre el suelo 'alfa'.\n"<<endl;
//Entrada de Datos
cout<<"Dame velocidad del disparo (metros/seg): ";cin>>v;
cout<<"Dame ángulo de inclinación (grados): ";cin>>a;
a=a*pi/180; //conversión a radianes
//Fórmulas: componentes de la velocidad
vx=v*cos(a);
vy=v*sin(a);
//Solución de la ecuación de 2º grado: -9.8*t*t/2 + vy*t=0, pues cuando llega al suelo sy=0
t=vy/(g/2);
sx=vx*t;
//También: sx=v*cos(a)*v*sin(a)/(g/2) ==> sx=v²sin(2a)/g
//Resultados
cout<<"El alcance del disparo es: "<<sx<<" ms."<<endl;
cout<<"El tiempo que tarda en alcanzar el objetivo es: "<<t<<" seg."<<endl;
cout<<"La altura máxima que alcanza es: "<<v*v*sin(a)*sin(a)/(2*g)<<" ms."<<endl;
return 0;
}

2 comentarios:

  1. Hola Mario pinche en tu nombre y apareci aqui,me puse a leer y no entiendo ni palabra de lo que buscas asi que mira te saludo y me salgo no antes sin decirte que hoy paso un dia tranquila aunque te dire que ayer me hicieron un electro,a causa de un disgustillo que dias atras tuve deje de comer,me quede baja de hierro y potasio y parecia que ni respiraba bien ,total de baja de hierro y esas cosas mas ya voy bien pero chico mi corazón es un caso,si pienso si pienso ...me ahogo ,me ahogo y el lunes me dan resultados del electro,este corazón mio es ¿sabes que? demasiado mimoso y todo le afecta.
    Gracias por tu compañia ,me gusta verme aqui sola.
    un abrazo
    Marina
















    '

    ResponderEliminar
  2. ...Mario,no se si entraras aqui o no ,de todas formas yo entre pinchando en mi blog tu nombre para ver como era el blog pero no hay nada de interes para mi y te escribi un comentario por haberme tu dados animos dias atras,entro ahora para que por mi no te molestes en contestar y ademas para que perdones esto tuyo es como te trabajo solo.
    un saludo y buenos dias
    Marina

    ResponderEliminar