// mathassistant.h #ifndef _COMMON_MATHASSISTANT_H_ #define _COMMON_MATHASSISTANT_H_ #include "boundingvolume.h" #define INT2FLOAT( n ) (float( n )) #ifdef _DEBUG #define FLOAT2INT( f ) (int( f )) #else #ifdef _WIN64 #define FLOAT2INT( f ) (int( f )) #else inline int FLOAT2INT( float f ) { __asm cvttss2si eax,[f] } #endif //_WIN64 #endif //_DEBUG // µÎ float »çÀÌÀÇ ·£´ý °ª ¾ò±â float Math_GetRandomFloatBetween( float fMin, float fMax ); // µ¥ÀÌÅÍ ¿ë·® ÁÙÀ̱â (floatÀ» 100¹è ÇÑ short·Î) short Math_FloatToShort( float fVal ); // µ¥ÀÌÅÍ ¿ë·® ÁÙÀ̱â (100¹è ÇÑ short¿¡¼­ float ¾ò±â) float Math_FloatFromShort( short nVal ); // fParamNÀÏ ¶§ fResultNÀÎ °æ¿ì, fParamToGetÀÏ ¶§ fResult ¾ò±â float Math_GetProportionalValueBetween( float fParam1, float fParam2, float fParamToGet, float fResult1, float fResult2 ); // ÁÖ¾îÁø º¤ÅÍ¿Í ¼öÁ÷ÀÎ µÎ º¤ÅÍ ¾ò±â void Math_GetOrthogonalVectors( WzVector* pwvOut1, WzVector* pwvOut2, const WzVector* pwvIn ); // ÁÖ¾îÁø º¤Å͸¦ ȸÀü ½ÃÄÑ ·£´ý º¤ÅÍ ¾ò±â WzVector* Math_GetRandomDirection( WzVector* pwvOut, const WzVector* pwvBase, float fAngle ); // BV ¾ÈÀÇ random À§Ä¡ ±¸Çϱâ void Math_GetRandomPosInBoundingVolume( WzVector* pwvOut, const WzBoundingVolume* pwbv ); // ¹æÇâ°¢ ¾ò±â - ¶óµð¾È (-yÃà : 0µµ, +xÃà : 90µµ) float Math_GetAngleFromVector( const WzVector* pwvDir ); //------------------------------------------------------------------------------ /** */ inline float Math_GetRandomFloatBetween( float fMin, float fMax ) { return ( fMin + ( fMax - fMin ) * ( ( (float)( rand() % 10001 ) ) * 0.0001f ) ); } //------------------------------------------------------------------------------ /** */ inline short Math_FloatToShort( float fVal ) { WzAssert( -32000.0f <= fVal && fVal <= 32000.0f ); return ( (short)( fVal * 100.0f ) ); } //------------------------------------------------------------------------------ /** */ inline float Math_FloatFromShort( short nVal ) { return ( (float)nVal * 0.01f ); } //------------------------------------------------------------------------------ /** ´Ü¼øÈ÷ Á÷¼±ÀÇ ¹æÁ¤½ÄÀÌ´Ù. y = (r2 - r1) / (p2 - p1) * (get - p1) + r1 */ inline float Math_GetProportionalValueBetween( float fParam1, float fParam2, float fParamToGet, float fResult1, float fResult2 ) { float fParamDiv = fParam2 - fParam1; float fParamMul = fParamToGet - fParam1; if( fParamDiv == 0.0f ) { return fResult1; } return ( fResult1 + ( fResult2 - fResult1 ) * fParamMul / fParamDiv ); } //------------------------------------------------------------------------------ /** ¿À¸¥¼Õ ÁÂÇ¥°è 0µµ : -yÃà (0.0f, -1.0f, 0.0f) 90µµ : +xÃà (1.0f, 0.0f, 0.0f) */ inline float Math_GetAngleFromVector( const WzVector* pwvDir ) { WzAssert( pwvDir ); WzVector wvDirNormal; SetVector( &wvDirNormal, pwvDir->x, pwvDir->y, 0.0f ); VectorNormalize( &wvDirNormal, &wvDirNormal ); float fAngle = acosf( -wvDirNormal.y ); if( wvDirNormal.x < 0.0f ) { // fAngle = ( 2 * WZ_PI ) - fAngle; fAngle = 6.28318530717958647692f - fAngle; } return fAngle; } #endif // _COMMON_MATHASSISTANT_H_