comparison trajectorymanagement/src/TrajectoryElement.h @ 1159:e1e7acef8eab

moved trajectory management library into Traffic Intelligence
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 22 Feb 2021 22:09:35 -0500
parents
children
comparison
equal deleted inserted replaced
1158:7eb972942f22 1159:e1e7acef8eab
1 #ifndef TRAJECTORYELEMENT_H_
2 #define TRAJECTORYELEMENT_H_
3
4 #include <istream>
5 #include <ostream>
6
7 #include "PointOperations.h"
8
9 /**
10 * TrajectoryElement class.
11 *
12 * The Trajectory class is composed of components called TrajectoryElement.
13 */
14 template<typename T>
15 class TrajectoryElement {
16 public:
17 /**
18 * Constructor.
19 */
20 TrajectoryElement() {}
21
22 /**
23 * Constructor.
24 *
25 * @param[in] frameNumber number of a frame
26 * @param[in] position position
27 */
28 TrajectoryElement(unsigned int frameNumber, const T& point) {
29 setFrameNumber(frameNumber);
30 setPoint(point);
31 }
32
33 /**
34 * Constructor.
35 *
36 * @param[in] trajectoryElement element of the trajectory
37 */
38 TrajectoryElement(const TrajectoryElement& trajectoryElement) {
39 setFrameNumber(trajectoryElement.getFrameNumber());
40 setPoint(trajectoryElement.getPoint());
41 }
42
43 /**
44 * Get number of a frame.
45 *
46 * @return number of a frame
47 */
48 unsigned int getFrameNumber() const {
49 return frameNumber;
50 }
51
52 /**
53 * Set number of a frame.
54 *
55 * @param[in] frameNumber number of a frame
56 */
57 void setFrameNumber(unsigned int iframeNumber) {
58 frameNumber = iframeNumber;
59 }
60
61 /**
62 * Get position.
63 *
64 * @return position
65 */
66 const T &getPoint() const {
67 return point;
68 }
69
70 /**
71 * Set position.
72 *
73 * @param[in] position position
74 */
75 void setPoint(const T& ipoint) {
76 point = ipoint;
77 }
78
79 /**
80 * Shift position.
81 *
82 * @param[in] t vector by which the position of the element should be shifted.
83 */
84 void shift(const T& t) {
85 point += t;
86 }
87
88 private:
89 /**
90 * Frame number.
91 */
92 unsigned int frameNumber;
93
94 /**
95 * Position of the element.
96 */
97 T point;
98 };
99
100 template<typename T>
101 static inline bool operator==(const TrajectoryElement<T>& a, const TrajectoryElement<T>& b) {
102 return (a.getFrameNumber() == b.getFrameNumber()) && (a.getPoint() == b.getPoint());
103 }
104
105 template<typename Ti, typename Tr>
106 std::basic_istream<Ti>& operator>>(std::basic_istream<Ti>& in, TrajectoryElement<Tr>& trajectoryElement) {
107 unsigned int frameNumber;
108 Tr point;
109 if (in >> frameNumber >> point) {
110 trajectoryElement.setFrameNumber(frameNumber);
111 trajectoryElement.setPoint(point);
112 }
113 return in;
114 }
115
116 template<typename Tr>
117 std::ostream& operator<<(std::ostream& out, const TrajectoryElement<Tr>& trajectoryElement) {
118 out << trajectoryElement.getFrameNumber() << " " << trajectoryElement.getPoint();
119 return out;
120 }
121
122 #endif /* TRAJECTORYELEMENT_H_ */