ugv_nav4d
DiscreteTheta.hpp
Go to the documentation of this file.
1#pragma once
2#include <assert.h>
3#include <math.h>
4#include <ostream>
5
7{
8 int theta;
9 int numAngles;
10
11 void normalize()
12 {
13 assert(numAngles >= 0);
14 if(theta < 0)
15 {
16 int num = (theta / -numAngles) + 1;
17 theta += numAngles * num;
18 }
19
20 if(theta >= numAngles)
21 theta = theta % numAngles;
22 }
23
24public:
25 DiscreteTheta(int val, unsigned int numAngles) : theta(val) , numAngles(numAngles) {
26 normalize();
27 }
28
29 DiscreteTheta(double val, unsigned int numAngles) : numAngles(numAngles) {
30 theta = round((val * numAngles) / (2.0 * M_PI));
31 normalize();
32 }
33
34 DiscreteTheta(const DiscreteTheta &o) : theta(o.theta), numAngles(o.numAngles) {
35 }
36
38 {
39 theta += rhs.theta;
40 normalize();
41 return *this;
42 }
43
45 {
46 theta -= rhs.theta;
47 normalize();
48 return *this;
49 }
50
52 {
53 lhs += rhs;
54 return lhs;
55 }
56
58 {
59 lhs -= rhs;
60 return lhs;
61 }
62
63 friend bool operator<(const DiscreteTheta& l, const DiscreteTheta& r)
64 {
65 return l.theta < r.theta;
66 }
67
68 friend bool operator==(const DiscreteTheta& l, const DiscreteTheta& r)
69 {
70 return l.theta == r.theta;
71 }
72
73 int getTheta() const
74 {
75 return theta;
76 }
77
78 double getRadian() const
79 {
80 return M_PI * 2.0 * theta / static_cast<double>(numAngles);
81 }
82
83 int getNumAngles() const
84 {
85 return numAngles;
86 }
87
89 {
90 DiscreteTheta diffA = ain-*this;
91
92 int a = diffA.theta;
93 int b = numAngles - diffA.theta;
94
95
96 if(a < b)
97 return DiscreteTheta(a, numAngles);
98
99 return DiscreteTheta(b, numAngles);
100 }
101};
102
103std::ostream& operator<< (std::ostream& stream, const DiscreteTheta& angle);
std::ostream & operator<<(std::ostream &stream, const DiscreteTheta &angle)
Definition DiscreteTheta.cpp:3
Definition DiscreteTheta.hpp:7
DiscreteTheta(const DiscreteTheta &o)
Definition DiscreteTheta.hpp:34
double getRadian() const
Definition DiscreteTheta.hpp:78
friend bool operator==(const DiscreteTheta &l, const DiscreteTheta &r)
Definition DiscreteTheta.hpp:68
int getNumAngles() const
Definition DiscreteTheta.hpp:83
DiscreteTheta & operator-=(const DiscreteTheta &rhs)
Definition DiscreteTheta.hpp:44
DiscreteTheta(double val, unsigned int numAngles)
Definition DiscreteTheta.hpp:29
friend DiscreteTheta operator+(DiscreteTheta lhs, const DiscreteTheta &rhs)
Definition DiscreteTheta.hpp:51
DiscreteTheta(int val, unsigned int numAngles)
Definition DiscreteTheta.hpp:25
friend DiscreteTheta operator-(DiscreteTheta lhs, const DiscreteTheta &rhs)
Definition DiscreteTheta.hpp:57
DiscreteTheta & operator+=(const DiscreteTheta &rhs)
Definition DiscreteTheta.hpp:37
int getTheta() const
Definition DiscreteTheta.hpp:73
DiscreteTheta shortestDist(const DiscreteTheta &ain) const
Definition DiscreteTheta.hpp:88
friend bool operator<(const DiscreteTheta &l, const DiscreteTheta &r)
Definition DiscreteTheta.hpp:63