2012-02-26 3 views
2

나는 스카이 다이빙 시뮬레이션을 위해이 게임과 같은 작은 게임 프로그램을 만들고 있는데, 방정식이 많이 떨어졌지만 터미널 속도가 너무 높습니다. 나는 이것에 대해 조사해 왔고, 내가 생각할 수있는 유일한 것은 측정 값이 잘못되었거나 뭔가가 있다는 것입니다. 어떤 도움을 주셔서 감사합니다.터미널 속도 시뮬레이션

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; 

    } 
} 

}

+0

이 질문은 터미널과 관련이 있거나 프로그램이 터미널 속도를 계산하기 때문에 "터미널"로 태그를 붙 혔습니까? –

답변

2

당신의 공식은 중력 가속도를 포함하지 않는 것, 그리고 당신은 또한 SI 미국/영국식 단위를 혼합하고 있습니다. 계산 된 속도의 단위는 무엇입니까? SI 단위로만 머무르는 것이 더 쉬울 것입니다. 좀 이상하게 보이는 또 다른 점은 다음과 같습니다.

const double drag = 0.7; //in meters 

항력 계수는 무 차원 숫자입니다. 실제 단위 (미터와 같음)가 없어야합니다.

정확한 수식은 다음

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

변수, SI 단위 대응 같습니다

미터 [kg] - 낙하 체의 질량.

g [m/s^2] - 중력 가속도.

d [kg/m^3] - 공기 밀도.

A [m^2] - 투영 영역.

C [-] - 드래그 계수.

이러한 단위를 사용하면 수식의 속도가 [m/s]가됩니다. 예로서. Q = 9.8, d = 1, A = 0.7, C = 0.7

이것은 터미널 속도 v = 57m/s를 합리적으로 보여줍니다.

+0

고마워요. 제가 몇 군데를 섞은 것을 생각했습니다. 정말 고마워요. :) – MNM