22 #ifndef PHOENIXVR_ANGLE_H 23 #define PHOENIXVR_ANGLE_H 25 #include "common/util.h" 26 #include "math/utils.h" 27 #include "phoenixvr/math.h" 44 Angle(
float angle,
float min,
float max) : _min(min), _max(max) {
49 Angle &operator=(
float angle) {
54 float angle()
const {
return _angle; }
56 static float mod(
float v,
float min,
float max) {
57 auto range = max - min;
58 auto a = fmod(v - min, range);
64 float mod(
float v)
const {
65 return mod(v, _min, _max);
69 _angle = mod(v, _min, _max);
70 auto range = _max - _min;
71 auto min = _rangeMin, max = _rangeMax;
72 if (_angle >= min && _angle <= max)
74 if (_angle >= min - range && _angle <= max - range)
76 if (_angle >= min + range && _angle <= max + range)
80 auto l0 =
ABS(_angle - _rangeMin);
81 auto l1 =
ABS(_angle - _rangeMin - range);
83 auto r0 =
ABS(_rangeMax - _angle);
84 auto r1 =
ABS(range + _rangeMax - _angle);
86 _angle = l < r ? _rangeMin : _rangeMax;
93 float rangeMin()
const {
97 float rangeMax()
const {
101 void setRange(
float min,
float max) {
107 setRange(-INFINITY, INFINITY);
115 AngleY(
float angle) :
Angle(angle, -kPi, -Math::epsilon) {}
119 v = _min + Math::epsilon;
121 v = _max - Math::epsilon;
Definition: algorithm.h:29
T MIN(T a, T b)
Definition: util.h:61
T ABS(T x)
Definition: util.h:58