• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

Math.hpp

Go to the documentation of this file.
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     
00034     inline double gosuToRadians(double angle)
00035     {
00036         return (angle - 90) * pi / 180;
00037     }
00040     inline double radiansToGosu(double angle)
00041     {
00042         return angle * 180 / pi + 90;
00043     }
00044 
00047     inline double degreesToRadians(double angle)
00048     {
00049         return angle * pi / 180;
00050     }
00053     inline double radiansToDegrees(double angle)
00054     {
00055         return angle * 180 / pi;
00056     }
00057     
00062     double offsetX(double angle, double radius);
00067     double offsetY(double angle, double radius);
00070     double angle(double fromX, double fromY, double toX, double toY,
00071         double def = 0);
00074     double angleDiff(double angle1, double angle2);
00076     double normalizeAngle(double angle);
00077     
00079     template<typename T>
00080     T square(T value)
00081     {
00082         return value * value;
00083     }
00084     
00087     template<typename T>
00088     T clamp(T value, T min, T max)
00089     {
00090         if (value < min)
00091             return min;
00092         if (value > max)
00093             return max;
00094         return value;
00095     }
00096     
00097     // Backward compatibility with 0.7.x
00098     template<typename T>
00099     T boundBy(T value, T min, T max)
00100     {
00101         return clamp(value, min, max);
00102     }
00103     
00107     int wrap(int value, int min, int max);
00111     float wrap(float value, float min, float max);
00115     double wrap(double value, double min, double max);
00116     
00118     inline double distanceSqr(double x1, double y1, double x2, double y2)
00119     {
00120         return square(x1 - x2) + square(y1 - y2);
00121     }
00122     
00124     double distance(double x1, double y1, double x2, double y2);
00125     
00128     template<typename T>
00129     T interpolate(T a, T b, double weight = 0.5)
00130     {
00131         return a * (1.0 - weight) + b * weight;
00132     }
00133 }
00134 
00135 #endif

Documentation not clear enough? Please go to one of the places listed on http://www.libgosu.org/ and leave feedback. Thanks!