132 lines
3.7 KiB
C
132 lines
3.7 KiB
C
|
#ifndef HGL_MATH_CONST_INCLUDE
|
|||
|
#define HGL_MATH_CONST_INCLUDE
|
|||
|
|
|||
|
#include<hgl/type/DataType.h>
|
|||
|
|
|||
|
namespace hgl
|
|||
|
{
|
|||
|
constexpr double HGL_E =2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274; //ŷ<><C5B7><EFBFBD><EFBFBD>(<28><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>)
|
|||
|
constexpr double HGL_LOG2E =1.44269504088896340736;
|
|||
|
constexpr double HGL_LOG10E =0.434294481903251827651;
|
|||
|
constexpr double HGL_LN2 =0.693147180559945309417;
|
|||
|
constexpr double HGL_LN10 =2.30258509299404568402;
|
|||
|
constexpr double HGL_PI =3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068;
|
|||
|
constexpr double HGL_PI_2 =1.57079632679489661923;
|
|||
|
constexpr double HGL_PI_4 =0.785398163397448309616;
|
|||
|
constexpr double HGL_PI_3_4 =2.356194490192344928938;
|
|||
|
constexpr double HGL_1_PI =0.318309886183790671538;
|
|||
|
constexpr double HGL_2_PI =0.636619772367581343076;
|
|||
|
constexpr double HGL_2_SQRTPI =1.12837916709551257390;
|
|||
|
constexpr double HGL_SQRT2 =1.41421356237309504880168872420969807;
|
|||
|
constexpr double HGL_SQRT1_2 =0.707106781186547524401;
|
|||
|
|
|||
|
constexpr double HGL_COS_ANG_0 =1;
|
|||
|
constexpr double HGL_COS_ANG_45 =0.707106781187;
|
|||
|
constexpr double HGL_COS_ANG_90 =0;
|
|||
|
constexpr double HGL_COS_ANG_135=-0.707106781187;
|
|||
|
constexpr double HGL_COS_ANG_180=-1;
|
|||
|
constexpr double HGL_COS_ANG_225=-0.707106781187;
|
|||
|
constexpr double HGL_COS_ANG_270=0;
|
|||
|
constexpr double HGL_COS_ANG_315=0.707106781187;
|
|||
|
|
|||
|
#define HGL_DEF_ANG2RAD(ang) constexpr double HGL_RAD_##ang=double(ang)*(HGL_PI/180.0f);
|
|||
|
|
|||
|
HGL_DEF_ANG2RAD(0)
|
|||
|
HGL_DEF_ANG2RAD(45)
|
|||
|
HGL_DEF_ANG2RAD(90)
|
|||
|
HGL_DEF_ANG2RAD(135)
|
|||
|
HGL_DEF_ANG2RAD(180)
|
|||
|
HGL_DEF_ANG2RAD(225)
|
|||
|
HGL_DEF_ANG2RAD(270)
|
|||
|
HGL_DEF_ANG2RAD(315)
|
|||
|
HGL_DEF_ANG2RAD(360)
|
|||
|
|
|||
|
#undef HGL_DEF_ANG2RAD
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD>Ƕ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
inline double hgl_ang2rad(const double ang)
|
|||
|
{
|
|||
|
return ang*(HGL_PI/180.0f);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>
|
|||
|
*/
|
|||
|
inline double hgl_rad2ang(const double rad)
|
|||
|
{
|
|||
|
return rad*(180.0f/HGL_PI);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡС<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
|||
|
* @param value Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param num Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
template<typename T>
|
|||
|
inline T hgl_clip_float(const T value,const int num)
|
|||
|
{
|
|||
|
if(num<=0)
|
|||
|
return int64(value);
|
|||
|
|
|||
|
if(value==0)return(0);
|
|||
|
|
|||
|
double per=pow(10,num);
|
|||
|
|
|||
|
return double(floor(value*per))/per;
|
|||
|
}
|
|||
|
|
|||
|
inline float half_to_float(const uint16 &h)
|
|||
|
{
|
|||
|
return ((h&0x8000)<<16) | (((h&0x7c00)+0x1C000)<<13) | ((h&0x03FF)<<13);
|
|||
|
}
|
|||
|
|
|||
|
inline uint16 float_to_half(const float &f)
|
|||
|
{
|
|||
|
const uint32 x = *((uint32 *)&f);
|
|||
|
|
|||
|
return ((x>>16)&0x8000)|((((x&0x7f800000)-0x38000000)>>13)&0x7c00)|((x>>13)&0x03ff);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param radius <EFBFBD>뾶
|
|||
|
*/
|
|||
|
inline double CircleArea(const double radius)
|
|||
|
{
|
|||
|
return(radius*radius*HGL_PI);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param l_radius <EFBFBD><EFBFBD><EFBFBD>뾶
|
|||
|
* @param s_radius <EFBFBD>̰뾶
|
|||
|
*/
|
|||
|
inline double ElipseArea(const double l_radius,const double s_radius)
|
|||
|
{
|
|||
|
return(l_radius*s_radius*HGL_PI);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param radius <EFBFBD><EFBFBD><EFBFBD>뾶
|
|||
|
*/
|
|||
|
inline double SphereVolume(const double radius)
|
|||
|
{
|
|||
|
return(radius*radius*radius*(HGL_PI*4.0f))/3.0f;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param x_radius x<EFBFBD>뾶
|
|||
|
* @param y_radius y<EFBFBD>뾶
|
|||
|
* @param z_radius z<EFBFBD>뾶
|
|||
|
*/
|
|||
|
inline double EllipsoidVolume(const double x_radius,const double y_radius,const double z_radius)
|
|||
|
{
|
|||
|
return(x_radius*y_radius*z_radius*(HGL_PI*4.0f))/3.0f;
|
|||
|
}
|
|||
|
}//namespace hgl
|
|||
|
#endif//HGL_MATH_CONST_INCLUDE
|