#include "TA/Common/Maths.h"
#include "TA/Common/Geometry.h"
float TAC_CALL StandardSlipRatioToNormalisedTraction(float fSlipRatio, const SurfaceAttribute& surfaceAttribute)
{
const float fInitialGradient = 7.0f;
const float fEndGradient = -0.2f;
const float fEndOffset = 1.2f;
const float fSegmentEndA = 0.12f;
const float fSegmentEndB = 0.25f;
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(fSlipRatio);
fSlipRatio *= fSign;
fSign *= 8.0f;
if (fSlipRatio < fSegmentEndA)
{
return fSign * fInitialGradient * fSlipRatio;
}
else if (fSlipRatio < fSegmentEndB)
{
return fSign * TA::Geometry::CubicInterpolate(
fSegmentEndAOut,
fSegmentEndBOut,
fCubicGradA,
fCubicGradB,
(fSlipRatio - fSegmentEndA) * fInvSegBLength);
}
else
{
float fValue = fEndGradient * fSlipRatio + fEndOffset;
if (fValue < 0.0f)
fValue = 0.0f;
return fSign * fValue;
}
}
© Copyright 2004-2006 TRUE AXIS PTY LTD Australia. All rights reserved.