Ver código fonte

Merge pull request #1023 from Azaezel/alpha41/mInvLerp

inverse lerp function
Brian Roberts 2 anos atrás
pai
commit
cc3c2c53ae

+ 11 - 0
Engine/source/math/mConsoleFunctions.cpp

@@ -353,6 +353,17 @@ DefineEngineFunction( mLerp, F32, ( F32 v1, F32 v2, F32 time ),,
    return mLerp( v1, v2, time );
 }
 
+DefineEngineFunction(mInvLerp, F32, (F32 v1, F32 v2, F32 point), ,
+   "Calculate the percentage of a point along a line.\n"
+   "@param v1 Interpolate From Input value."
+   "@param v2 Interpolate To Input value."
+   "@param point Point along range."
+   "@returns normalized time used to interpolate values"
+   "@ingroup Math")
+{
+   return mInvLerp(v1, v2, point);
+}
+
 DefineEngineFunction( mPi, F32, (),,
     "Return the value of PI (half-circle in radians).\n"
     "@returns The value of PI."

+ 8 - 0
Engine/source/math/mMathFn.h

@@ -265,6 +265,14 @@ inline T mLerp( const T &v1, const T &v2, F32 factor )
    return ( v1 * ( 1.0f - factor ) ) + ( v2 * factor );
 }
 
+/// Template function for determining a percentage of interpolation between any two
+/// types which implement operators for scalar multiply and addition.
+template <typename T>
+inline T mInvLerp(const T& v1, const T& v2, F32 point)
+{
+   return (point - v1) / (v2 - v1);
+}
+
 inline S32 mMulDiv(S32 a, S32 b, S32 c)
 {
    return m_mulDivS32(a, b, c);