X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FBalloon%2FBalloonSim.cpp;h=350298b50e9bc1ab9ab7b723a6a595f20708ff50;hb=3b870192f4dbd3a9adb435f0cf9ca9591eb4f62e;hp=92cb0a26f19d77ea8f48320619ff3d4d795bed54;hpb=485230b443de22c97d5c4ddfda98598fb52ce98a;p=flightgear.git diff --git a/src/FDM/Balloon/BalloonSim.cpp b/src/FDM/Balloon/BalloonSim.cpp index 92cb0a26f..350298b50 100644 --- a/src/FDM/Balloon/BalloonSim.cpp +++ b/src/FDM/Balloon/BalloonSim.cpp @@ -45,7 +45,6 @@ HISTORY #include #include -#include
#include #include "BalloonSim.h" @@ -79,10 +78,10 @@ balloon::balloon() /* size for hot air balloons */ /************************************************************************/ - balloon_envelope_area = 4.0 * (8.8 * 8.8) * FG_PI; - balloon_envelope_volume = (4.0/3.0) * (8.8 * 8.8 * 8.8) * FG_PI; + balloon_envelope_area = 4.0 * (8.8 * 8.8) * SGD_PI; + balloon_envelope_volume = (4.0/3.0) * (8.8 * 8.8 * 8.8) * SGD_PI; - wind_facing_area_of_balloon = FG_PI * (8.8 * 8.8); + wind_facing_area_of_balloon = SGD_PI * (8.8 * 8.8); wind_facing_area_of_basket = 2.0; //guessed: 2 m^2 cw_envelope=0.45; //a sphere in this case @@ -170,25 +169,35 @@ void balloon::update() /* later, but currently was my main concern to get it going... */ /************************************************************************/ +#ifndef FG_OLD_WEATHER sgVec3 v; + FGPhysicalProperty wdbpos = WeatherDatabase->get(position); + //get the current wind velocity and store it in v - //Point3D temp = WeatherDatabase->get(position).Wind; + //Point3D temp = wdbpos.Wind; //sgSetVec3(v, temp.x(), temp.y(), temp.z()); - sgCopyVec3(v, WeatherDatabase->get(position).Wind ); + sgCopyVec3(v, wdbpos.Wind ); sgSubVec3(v, velocity); float speed = sgLengthVec3(v); // calculate the density of the gas inside - double rho = WeatherDatabase->get(position).AirPressure / (287.14 * T); + double rho = wdbpos.AirPressure / (287.14 * T); // calculate the mass of the air double mAir = rho * balloon_envelope_volume; // loss of energy by cooling down: float k = 1.0 / (1.0/4.8 + 1.0/(4.8+3.4*speed) + l_of_the_envelope/lambda); - float Q = k * balloon_envelope_area * (dt/3600.0) * (WeatherDatabase->get(position).Temperature - T); //(dt/3600.0) = time since last call in hours + float Q = k * balloon_envelope_area * (dt/3600.0) * (wdbpos.Temperature - T); //(dt/3600.0) = time since last call in hours + +#else + // I realy don't think there is a solution for this without WeatherCM + // but this is a hack, and it's working -- EMH + double mAir = 0; + float Q = 0; +#endif // gain of energy by heating: if (fuel_left > 0.0) //but only with some fuel left ;-) @@ -217,8 +226,10 @@ void balloon::update() sgVec3 fTotal, fFriction, fLift; sgScaleVec3(fTotal, gravity_vector, mTotal); +#ifndef FG_OLD_WEATHER sgScaleVec3(fFriction, v, cw_envelope * wind_facing_area_of_balloon * WeatherDatabase->getAirDensity(position) * speed / 2.0); //wind resistance - sgScaleVec3(fLift, gravity_vector, -balloon_envelope_volume * WeatherDatabase->get(position).AirPressure / (287.14 * WeatherDatabase->get(position).Temperature)); + sgScaleVec3(fLift, gravity_vector, -balloon_envelope_volume * wdbpos.AirPressure / (287.14 * wdbpos.Temperature)); +#endif sgAddVec3(fTotal, fLift); sgAddVec3(fTotal, fFriction);