From 5d3b58438a337b0d1bb78af2c93e9bb7f2db7047 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 14 Jul 2003 20:48:23 +0000 Subject: [PATCH] Make sure sign is preserved for turbulence direction. --- src/FDM/JSBSim/FGAtmosphere.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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(); -- 2.39.5