30 const double PI = 3.14159265358979323846;
31 const double PI_2 = 1.57079632679489661923;
32 const double PI_4 = 0.78539816339744830962;
33 const double LN_2 = 0.69314718055994530942;
44 inline bool equivalent(
float lhs,
float rhs,
float epsilon=1e-6)
45 {
float delta = rhs-lhs;
return delta<0.0f?delta>=-epsilon:delta<=epsilon; }
51 inline bool equivalent(
double lhs,
double rhs,
double epsilon=1e-6)
52 {
double delta = rhs-lhs;
return delta<0.0?delta>=-epsilon:delta<=epsilon; }
59 inline T
minimum(T lhs,T rhs) {
return lhs<rhs?lhs:rhs; }
66 inline T
maximum(T lhs,T rhs) {
return lhs>rhs?lhs:rhs; }
82 inline T
sign(T v) {
return v<(T)0?(T)-1:(T)1; }
85 inline T
signOrZero(T v) {
return v<(T)0 ? (T)-1 : ( v>(T)0 ? (T)1 : 0 ); }
93 inline float inDegrees(
float angle) {
return angle*(float)PI/180.0f; }
94 inline double inDegrees(
double angle) {
return angle*PI/180.0; }
105 inline float round(
float v) {
return v>=0.0f?floorf(v+0.5f):ceilf(v-0.5f); }
106 inline double round(
double v) {
return v>=0.0?floor(v+0.5):ceil(v-0.5); }
108 #if defined(_MSC_VER)
109 inline bool isNaN(
double v) {
return _isnan(v)!=0; }
110 #elif defined(__ANDROID__)
111 inline bool isNaN(
float v) {
return isnan(v); }
112 inline bool isNaN(
double v) {
return isnan(v); }
114 inline bool isNaN(
float v) {
return std::isnan(v); }
115 inline bool isNaN(
double v) {
return std::isnan(v); }
123 return fabsf(((b-c)^(a-b))*(d-b));
129 const T& b1,
const T& b2,
const T& b3)
bool equivalent(float lhs, float rhs, float epsilon=1e-6)
T clampBelow(T v, T maximum)
float findAsciiToFloat(const char *str)
T clampBetween(T v, T minimum, T maximum)
float RadiansToDegrees(float angle)
OSG_EXPORT double asciiToDouble(const char *str)
T clampAbove(T v, T minimum)
T clampTo(T v, T minimum, T maximum)
float DegreesToRadians(float angle)
OSG_EXPORT double findAsciiToDouble(const char *str)
float asciiToFloat(const char *str)
float computeVolume(const T &a, const T &b, const T &c, const T &d)
float inDegrees(float angle)