From: david Date: Mon, 14 Jul 2003 20:48:23 +0000 (+0000) Subject: Make sure sign is preserved for turbulence direction. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=5d3b58438a337b0d1bb78af2c93e9bb7f2db7047;p=flightgear.git Make sure sign is preserved for turbulence direction. --- diff --git a/src/FDM/JSBSim/FGAtmosphere.cpp b/src/FDM/JSBSim/FGAtmosphere.cpp index b8098da0b..bf02c1bc0 100644 --- a/src/FDM/JSBSim/FGAtmosphere.cpp +++ b/src/FDM/JSBSim/FGAtmosphere.cpp @@ -260,6 +260,16 @@ void FGAtmosphere::Calculate(double altitude) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +// square a value, but preserve the original sign +static inline double +square_signed (double value) +{ + if (value < 0) + return value * value * -1; + else + return value * value; +} + void FGAtmosphere::Turbulence(void) { switch (turbType) { @@ -277,8 +287,11 @@ void FGAtmosphere::Turbulence(void) Magnitude += MagnitudeAccel*rate*State->Getdt(); vDirectiondAccelDt.Normalize(); - vDirectiondAccelDt(eX) *= vDirectiondAccelDt(eX); - vDirectiondAccelDt(eY) *= vDirectiondAccelDt(eY); + + // deemphasise non-vertical forces + vDirectiondAccelDt(eX) = square_signed(vDirectiondAccelDt(eX)); + vDirectiondAccelDt(eY) = square_signed(vDirectiondAccelDt(eY)); + vDirectionAccel += vDirectiondAccelDt*rate*TurbRate*State->Getdt(); vDirectionAccel.Normalize(); vDirection += vDirectionAccel*rate*State->Getdt();