diff --git a/VistaCoreLibs/VistaBase/VistaMathBasics.h b/VistaCoreLibs/VistaBase/VistaMathBasics.h index e41a9100b5c4ce9fe45019d4fcf88c468f1ffa72..24f02faa7cd34d497cb258020707595754812122 100644 --- a/VistaCoreLibs/VistaBase/VistaMathBasics.h +++ b/VistaCoreLibs/VistaBase/VistaMathBasics.h @@ -29,6 +29,7 @@ /* INCLUDES */ /*============================================================================*/ +#include <cassert> #include <cmath> #include <limits> @@ -68,9 +69,14 @@ namespace Vista template< typename TFloat > bool IsValidNumber( const TFloat fValue ); + // clamps val to the range [minVal, maxVal] template< typename TFloat > TFloat Clamp( const TFloat val, const TFloat minVal, const TFloat maxVal ); + // mixes valA and valB using a param in [0, 1] + template< typename TFloat, typename TParam > + TFloat Mix( const TParam param, const TFloat valA, const TFloat valB ); + // true iff val >= minVal && val <= maxVal template< typename TFloat > bool GetIsInRangeInclusive(const TFloat val, const TFloat minVal, const TFloat maxVal); @@ -82,7 +88,7 @@ namespace Vista template< typename TFloat > TFloat Sign( const TFloat val ); -} +} // namespace Vista /** * Convert angles given in radians to degrees and vice versa. @@ -122,6 +128,13 @@ TFloat Vista::Clamp( const TFloat val, const TFloat minVal, const TFloat maxVal return val < minVal ? minVal : ( val > maxVal ? maxVal : val ); } +template< typename TFloat, typename TParam > +TFloat Vista::Mix( const TParam param, const TFloat valA, const TFloat valB ) +{ + assert( param >= TParam( 0.0 ) && param <= TParam( 1.0 ) && "Invalid mix param." ); + return ( TParam( 1.0 ) - param ) * valA + param * valB; +} + template< typename TFloat > bool Vista::GetIsInRangeInclusive(const TFloat val, const TFloat minVal, const TFloat maxVal) {