#include "TA/Common/Maths.h"
#include "TA/Common/Geometry.h"
float TAC_CALL SlipAngleToLateralForce(
float fSlipAngle,
float fLongitudalSlipRatio,
const SurfaceAttribute& surfaceAttribute)
{
const float fInitialGradient = 14.0f;
const float fEndGradient = -0.1f;
const float fEndOffset = 2.0f;
const float fSegmentEndA = 0.08f;
const float fSegmentEndB = 0.27f;
const float fSegmentEndAOut = fInitialGradient * fSegmentEndA;
const float fSegmentEndBOut = fEndGradient * fSegmentEndB + fEndOffset;
const float fInvSegBLength = 1.0f / (fSegmentEndB - fSegmentEndA);
const float fCubicGradA = fInitialGradient * (fSegmentEndB - fSegmentEndA);
const float fCubicGradB = fEndGradient * (fSegmentEndB - fSegmentEndA);
float fSign = TA::Sign(fSlipAngle);
fSlipAngle *= fSign;
float fResult;
if (fSlipAngle < fSegmentEndA)
{
fResult = fSign * fInitialGradient * fSlipAngle;
}
else if (fSlipAngle < fSegmentEndB)
{
fResult = fSign * TA::Geometry::CubicInterpolate(
fSegmentEndAOut,
fSegmentEndBOut,
fCubicGradA,
fCubicGradB,
(fSlipAngle - fSegmentEndA) * fInvSegBLength);
}
else
{
float fValue = fEndGradient * fSlipAngle + fEndOffset;
if (fValue < 0.0f)
fValue = 0.0f;
fResult = fSign * fValue;
}
fResult *= 2.5f;
fResult /= (TA::Fabs(fLongitudalSlipRatio) * 8.5f + 1.0f);
return fResult;
}
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.