sábado, 9 de febrero de 2013

Cálculo para la fórmula de un proyectil en C++



Fórmula del proyectil.

En el siguiente código, se muestra como calcular lo siguiente:

- Tiempo de altura máxima del proyectil.
- Altura máxima que alcanza el proyectil.
- Tiempo total en el aire del proyectil.
- Distancia máxima del proyectil al tocar con el piso.

- La velocidad en X del proyectil después de 1 segundo de haber sido lanzado.
- La velocidad en Y del proyectil después de 1 segundo de haber sido lanzado.

Además hemos hecho uso de una función para agarrar solo los dos primeros dígitos después del punto, y la se ha definido como "redondea".





#include <cstdlib> 
#include <iostream>
#include <math.h>
#include<iomanip>
#include <stdio.h>

 
using namespace std;


double redondea(double value, int decimal_places)
{
    double integer = 0,
           fractional = 0,
           output = 0;

    int j = 0,
        places = 1;

    fractional = modf(value, &output);
    for( int i = 0; i < decimal_places + 1; i++ )
    {
        fractional = modf(fractional, &integer);
        for( j = 0; j < i; j++ )
        {
            places *= 10;
        }
        output += integer / places;
        places = 1;
        fractional *= 10;
    }
    return output;
}

int main()
{
float velocidad, angulo, distancia_max,vox,voy,tiempo_max,altura_maxima,tiempo_total,velocidad_x,velocidad_y;
    
    cout << "DAME LA VELOCIDAD INICIAL DEL PROYECTIL: ";
    cin >> velocidad;
    while (velocidad <= 0)
    {
        cout << "DAME LA VELOCIDAD INICIAL DEL POYECTIL: ";
        cin >> velocidad;
    }
    
    cout << "DAME EL ANGULO DE LANZAMIENTO DEL POYECTIL: ";
    cin >> angulo;
    while (angulo<=0 and angulo>360)
    {
        cout << "\nDAME EL ANGULO DE LANZAMIENTO DEL POYECTIL: ";
        cin >> angulo;
    }
    
// convirtiendo el angulo en radianes para despues sacar el angulo    
    vox = redondea((velocidad * cos((angulo*M_PI)/180)),2);
    voy = redondea((velocidad * sin((angulo*M_PI)/180)),2);
    
//------------------------------------------------------------------------------
// Calculando el tiempo de altura máxima
    
    tiempo_max = redondea((voy/9.8),2);
    cout << "\nEL TIEMPO DE ALTURA MAXIMA DEL PROYECTIL ES :" << tiempo_max <<" s";
//------------------------------------------------------------------------------
// Calculando la altura maxima
    
    altura_maxima = redondea((voy*tiempo_max) + (-9.8 * pow(tiempo_max,2)/2),2);
    cout << "\nLA ALTURA MAXIMA QUE ALCANZA EL PROYECTIL ES :" << altura_maxima << " m";
//------------------------------------------------------------------------------
// Calculando el tiempo total del poyectil
    
    tiempo_total = redondea((tiempo_max *2),2); 
    cout << "\nEL TIEMPO TOTAL EN EL AIRE DEL PROYECTIL ES :" << tiempo_total << " s";
//------------------------------------------------------------------------------
// Calculando la distancia maxima que llega al suelo    
    
    distancia_max = redondea((vox * tiempo_total ),2); 
    cout << "\nLA DISTANCIA MAXIMA AL SUELO DEL PROYECTIL ES :" << distancia_max << " m";
//------------------------------------------------------------------------------
// Calculando la velocidad en X y Y del proyectil después de 1 seg de haber sido disparado

   velocidad_x = ((-9.8 * 1) + voy);
   velocidad_y = vox;
   cout << "\nLA VELOCIDAD EN X DEL PROYECTIL DESPUES DE UN 1(S) ES :" << velocidad_x << " m/s";
   cout << "\nLA VELOCIDAD EN Y DEL PROYECTIL DESPUES DE UN 1(S) ES :" << velocidad_y << " m/s";
   
   cout << "\n";
   
cin.get();

}

No hay comentarios:

Publicar un comentario