Симуляция скорости терминала - PullRequest
2 голосов
/ 27 февраля 2012

Я работаю над созданием небольшой игровой программы, подобной этой, для симулятора прыжков в небо, и у меня есть много уравнений, но моя конечная скорость слишком высока для данного альта для всего этого.Я смотрел на это и обдумывал, единственное, о чем я могу думать, это то, что у меня одно из измерений неверное или что-то в этом роде.Любая помощь будет оценена с этим.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GasLaws
 {
   class Program
{


    static void Main(string[] args)
    {

           double temperature;
           double airPressure;
           double airDensity;
           double tV;

           double alt;

           //constants
           const double gasCont = 287.05;
           const double startTemp = 15; //this is C ground level
           const double aidRate = 0.0065; //adiobatic rate for temperature by elevation

        //Human Constannts
           const double drag = 0.7; //in meters
           const double area = 7.5; //ft^2
           const double wieght = 175;



        Console.WriteLine("Enter the alt in feet");
        int tempint = Int32.Parse(Console.ReadLine());
        alt = (double)tempint * 0.3048; //convert feet to meters
        Console.WriteLine("Alt = " + alt + " m");

        //calculate air pressur
        airPressure = AirPressure(alt);
        temperature = CalTemp(startTemp, alt, aidRate);
        airDensity = AirDensity(airPressure, gasCont, temperature);
        tV = TerminalVelocity(wieght, drag, airDensity, area);

        //pasue screen for a second
        Console.ReadLine();

    }

    //p = 101325(1-2.25577 * 10^-5 * alt) ^5
    //this calculates correctly
    private static double  AirPressure(double al) 
    {
        double tempAlt = 1 - 2.25577 * 0.00001 * al;
        Console.WriteLine("Inside eq = " + tempAlt);
        tempAlt = Math.Pow(tempAlt, 5 );
        Console.WriteLine("Power of 5 = " + tempAlt);
        tempAlt = 101325 * tempAlt;
        Console.WriteLine("Pressure is = " + tempAlt + " Pascal");
        return tempAlt;
    }

    //temperature calculation
    // use adiobatic rate to calculate this
    //this is right
    private static double CalTemp(double t, double al, double rate) //start temperature and altitude 
    {

        double nTemp = t;
        for (int i = 0; i < al; i++)
            {
                nTemp -= rate;
            }
        Console.WriteLine("Temperature in for loop = " + nTemp);
        return nTemp;
    }

    //claculate like this
    //D  Pressure / gas constant * temperature
    //this works fine
    private static double AirDensity(double pres, double gas, double temp) 
    {
        temp = temp + 273.15; //convert temperautre to Kelvans
        double dens = pres / (gas * temp);
        dens = dens / 1000;
        Console.WriteLine("PResure = " + pres);
        Console.WriteLine("Gas cont = " + gas);
        Console.WriteLine("Temperture = " + temp);
        Console.WriteLine("Air Density is: " + dens);
        return dens;

    }

    private static double TerminalVelocity(double w, double cd, double p, double a)
    {
        double v = (2 * w) / (cd * p * a) ;
        v = Math.Sqrt(v);
        Console.WriteLine("Terminal Velocity = " + v);
        return v;

    }
}

}

1 Ответ

2 голосов
/ 27 февраля 2012

Ваша формула не включает гравитационное ускорение, и вы также смешиваете единицы СИ и США / имперские единицы. Какая единица измерения будет иметь ваша расчетная скорость? Вероятно, будет проще, если вы останетесь только с единицами СИ. Еще одна вещь, которая выглядит немного странно, это строка:

const double drag = 0.7; //in meters

Коэффициент сопротивления - это безразмерное число. У него не должно быть физической единицы (например, метра).

Правильная формула:

v = sqrt((2 * m * g) / (d * A * C))

Переменные с соответствующими единицами СИ:

м [кг] - масса падающего тела.

g [м / с ^ 2] - гравитационное ускорение.

d [кг / м ^ 3] - плотность воздуха.

A [м ^ 2] - проектируемая площадь.

C [-] - Коэффициент аэродинамического сопротивления.

Если вы используете эти единицы, формула даст скорость в [м / с]. В качестве примера. давайте попробуем следующие значения с единицами, как указано выше: m = 80, g = 9,8, d = 1, A = 0,7, C = 0,7

Это дает предельную скорость v = 57 м / с, что кажется разумным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...