00001 00002 00003 00004 #ifndef GOSU_MATH_HPP 00005 #define GOSU_MATH_HPP 00006 00007 namespace Gosu 00008 { 00010 const double pi = 3.1415926536; 00011 00014 inline long trunc(double value) 00015 { 00016 return static_cast<long>(value); 00017 } 00018 00020 inline long round(double value) 00021 { 00022 if (value >= 0) 00023 return static_cast<long>(value + 0.5); 00024 else 00025 return static_cast<long>(value - 0.5); 00026 } 00027 00030 double random(double min, double max); 00031 00033 inline double gosuToRadians(double angle) 00034 { 00035 return (angle - 90) * pi / 180; 00036 } 00038 inline double radiansToGosu(double angle) 00039 { 00040 return angle * 180 / pi + 90; 00041 } 00042 00047 double offsetX(double angle, double radius); 00052 double offsetY(double angle, double radius); 00055 double angle(double fromX, double fromY, double toX, double toY, 00056 double def = 0); 00059 double angleDiff(double angle1, double angle2); 00061 double normalizeAngle(double angle); 00062 00064 template<typename T> 00065 T square(T value) 00066 { 00067 return value * value; 00068 } 00069 00072 template<typename T> 00073 T clamp(T value, T min, T max) 00074 { 00075 if (value < min) 00076 return min; 00077 if (value > max) 00078 return max; 00079 return value; 00080 } 00081 00082 // Backward compatibility with 0.7.x 00083 template<typename T> 00084 T boundBy(T value, T min, T max) 00085 { 00086 return clamp(value, min, max); 00087 } 00088 00090 inline double distanceSqr(double x1, double y1, double x2, double y2) 00091 { 00092 return square(x1 - x2) + square(y1 - y2); 00093 } 00094 00096 double distance(double x1, double y1, double x2, double y2); 00097 00100 template<typename T> 00101 T interpolate(T a, T b, double weight = 0.5) 00102 { 00103 return a * (1.0 - weight) + b * weight; 00104 } 00105 } 00106 00107 #endif
Documentation not clear enough? Please go to one of the places listed on http://www.libgosu.org/ and leave feedback. Thanks!