00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef WP_MATH_H
00018 #define WP_MATH_H
00019
00020 #include "WP_Def.h"
00021
00022 namespace WPCG
00023 {
00042 class WP_Math
00043 {
00044 public:
00045 ~WP_Math(){};
00046
00051 static WP_Math* getInstance()
00052 { if (!_instance)
00053 _instance = new WP_Math();
00054 return _instance;
00055 }
00056
00062 scalar degreeToRad(int angle) const
00063 {
00064 return ((scalar)angle) * DEGRAD;
00065 }
00066
00072 scalar fDegreeToRad(scalar angle) const
00073 {
00074 return angle * DEGRAD;
00075 }
00076
00082 int radToDegree(scalar rad) const
00083 {
00084 int result = (int)(round(rad * RADDEG));
00085
00086 if (result < 0)
00087 {
00088 result %= 360;
00089 return result + 360;
00090 }
00091
00092 if (result >= 360)
00093 {
00094 result %= 360;
00095 return result - 360;
00096 }
00097
00098 return result % 360;
00099 }
00100
00106 scalar fRadToDegree(scalar rad) const
00107 {
00108 return rad * RADDEG;
00109 }
00110
00116 scalar round(scalar s) const
00117 {
00118 scalar f = (scalar)floor(s);
00119 if ((s - 0.5) < f)
00120 return f;
00121 return (scalar)ceil(s);
00122 }
00123
00129 scalar getSin(int i) const
00130 {
00131 if (i < 0)
00132 {
00133 i %= 360;
00134 if (i < 0)
00135 {
00136 i = 360 + i ;
00137 }
00138 }
00139 else
00140 {
00141 i %= 360;
00142 }
00143 return aSin[i];
00144 };
00145
00151 scalar getCos(int i) const
00152 {
00153 if (i < 0)
00154 {
00155 i %= 360;
00156 if (i < 0)
00157 {
00158 i = 360 + i;
00159 }
00160 }
00161 else
00162 {
00163 i %= 360;
00164 }
00165 return aCos[i];
00166 };
00167
00168 private:
00169 WP_Math();
00170
00174 scalar aSin[360];
00175
00179 scalar aCos[360];
00180
00184 static WP_Math* _instance;
00185 };
00186 }
00187 #endif
00188