Conscience Core
Csc2dTypes.h
Go to the documentation of this file.
1 //
2 // Csc2dTypes.hpp
3 // ConscienceRobotManager
4 //
5 // Created by Ilies Zaoui on 29/07/2021.
6 // Copyright © 2019 Conscience Robotics. All rights reserved.
7 //
8 
9 #ifndef Csc2dTypes_h
10 #define Csc2dTypes_h
11 
12 #include <map>
13 #include <string>
14 #include <vector>
15 using std::string, std::map, std::vector;
16 
17 namespace conscience_core::axiomes {
18 
19 class CscRect2d;
20 
21 class CscPoint2d {
22 
23 public:
24  double x;
25  double y;
26 
27  CscPoint2d(const CscPoint2d *fromPoint);
28  CscPoint2d(double inX = 0, double inY = 0);
29  virtual ~CscPoint2d() = default;
30 
31  // Opérateur d'affectation par copie
32  CscPoint2d& operator=(const CscPoint2d& other) {
33  if (this != &other) {
34  x = other.x;
35  y = other.y;
36  }
37  return *this;
38  }
39 
40  double getX() const;
41  double getY() const;
42  virtual operator string() const { return toString(); }
43  virtual string toString() const;
44 
45  double distanceWith(const CscPoint2d *point);
46  double distanceWith(const CscPoint2d &point);
47 
48  CscPoint2d plus(const CscPoint2d &other) const;
49  CscPoint2d minus(const CscPoint2d &other) const;
50  CscPoint2d operator+(const CscPoint2d &other) const;
51  CscPoint2d operator-(const CscPoint2d &other) const;
52 
56  bool isInside(const CscRect2d &rectangle) const;
57 
61  virtual map<string, double> toMap() const;
62 
63  virtual CscPoint2d *clone() const;
64 
68  static CscPoint2d *zero();
69 
70 
71 };
72 
74 
75 vector<const CscPoint2d *> clonePoints2d(const vector<const CscPoint2d *> &originalVector);
76 
77 class CscLine2d {
78 
79 public:
80  CscLine2d(const CscPoint2d *first = CscPoint2d::zero(), const CscPoint2d *second = CscPoint2d::zero(), const string &colorHex = "#6abc8e", const int width = 1);
81  ~CscLine2d();
82 
83  const CscPoint2d *getFirst() const;
84  const CscPoint2d *getSecond() const;
85  operator string() const { return toString(); }
86  string toString() const;
87 
88 
89 private:
90  const CscPoint2d *first;
91  const CscPoint2d *second;
92 
93 };
94 
95 vector<CscLine2d*> cloneLines2d(const vector<CscLine2d*> &originalVector);
96 
97 class CscLine2dStylized : public CscLine2d {
98 
99 public:
100  CscLine2dStylized(const CscPoint2d *first, const CscPoint2d *second, const string &colorHex = "#6abc8e", const int width = 1);
102 
103  const string &getColorHex() const;
104  int getWidth() const;
105 
106 private:
107 
108  const string colorHex; //format : #ffffff
109  const int width;
110 };
111 
112 vector<CscLine2dStylized*> cloneLine2dStylized(const vector<CscLine2dStylized*> &originalVector);
113 
114 class CscRect2d {
115 public:
118  CscRect2d(double bottomLeftX = 0, double bottomLeftY = 0, double width = 0, double height = 0);
119  CscRect2d(const CscPoint2d &bottomLeft, const CscSize2d &size);
120  CscRect2d(const CscRect2d &other);
121  CscRect2d(CscRect2d &&other);
122 
123  // Opérateur d'affectation par copie
124  CscRect2d& operator=(const CscRect2d& other) {
125  if (this != &other) { // Vérifie l'auto-affectation
126  bottomLeft = other.bottomLeft;
127  size = other.size;
128  }
129  return *this;
130  }
131 
132  // Opérateur d'affectation par déplacement
133  CscRect2d& operator=(CscRect2d&& other) noexcept {
134  if (this != &other) { // Vérifie l'auto-affectation
135  bottomLeft = std::move(other.bottomLeft);
136  size = std::move(other.size);
137  }
138  return *this;
139  }
140 
141  CscPoint2d topLeft() const;
142  CscPoint2d topRight() const;
143  CscPoint2d bottomRight() const;
144  CscPoint2d center() const;
145  CscRect2d intersection(const CscRect2d &other) const;
146  double area() const;
147 
148  double getWidth() const;
149  double getHeight() const;
150  bool isIncludedInOther(const CscRect2d &rectangle) const;
151 
152  string toString() const;
153 
157  double distanceWith(const CscRect2d &rectangle2) const;
158  double getIntersectionOverUnionWith(const CscRect2d &bb2) const;
159 
160 };
161 
162 CscRect2d averageRectangle(const vector<CscRect2d> &rectangles);
163 
164 
166 
167 public:
171  double rotation;
172 
176  static CscPoint2dOriented *zero();
177 
178  CscPoint2dOriented(const CscPoint2d &point, double rotation);
179  CscPoint2dOriented(double x = 0, double y = 0, double rotation = 0);
180  ~CscPoint2dOriented() override = default;
181 
185  double getRotation() const;
186 
190  void setRotation(double rotation);
191 
192  CscPoint2dOriented *clone() const override;
193 
194  map<string, double> toMap() const override;
195  string toString() const override;
196 };
197 
198 }
199 #endif /* Csc2dTypes_h */
conscience_core::axiomes::CscPoint2d::clone
virtual CscPoint2d * clone() const
Definition: Csc2dTypes.cpp:119
conscience_core::axiomes::CscSize2d
CscPoint2d CscSize2d
Definition: Csc2dTypes.h:73
conscience_core::axiomes::CscLine2dStylized
Definition: Csc2dTypes.h:97
conscience_core::axiomes::CscRect2d::intersection
CscRect2d intersection(const CscRect2d &other) const
Definition: Csc2dTypes.cpp:267
conscience_core::axiomes::CscLine2d::getFirst
const CscPoint2d * getFirst() const
Definition: Csc2dTypes.cpp:137
conscience_core::axiomes::CscPoint2d::distanceWith
double distanceWith(const CscPoint2d *point)
Definition: Csc2dTypes.cpp:53
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
conscience_core::axiomes::CscPoint2dOriented::~CscPoint2dOriented
~CscPoint2dOriented() override=default
conscience_core::axiomes::CscRect2d::operator=
CscRect2d & operator=(CscRect2d &&other) noexcept
Definition: Csc2dTypes.h:133
conscience_core::axiomes::CscLine2d::toString
string toString() const
Definition: Csc2dTypes.cpp:150
conscience_core::axiomes::CscLine2dStylized::getColorHex
const string & getColorHex() const
Definition: Csc2dTypes.cpp:164
conscience_core::axiomes::CscRect2d::size
CscSize2d size
Definition: Csc2dTypes.h:117
conscience_core::axiomes::CscPoint2d::CscPoint2d
CscPoint2d(const CscPoint2d *fromPoint)
Definition: Csc2dTypes.cpp:19
conscience_core::axiomes::CscLine2dStylized::~CscLine2dStylized
~CscLine2dStylized()
Definition: Csc2dTypes.cpp:172
conscience_core::axiomes::CscRect2d::area
double area() const
Definition: Csc2dTypes.cpp:198
conscience_core::axiomes::cloneLine2dStylized
vector< CscLine2dStylized * > cloneLine2dStylized(const vector< CscLine2dStylized * > &originalVector)
Definition: Csc2dTypes.cpp:154
conscience_core::axiomes::CscPoint2d::y
double y
Definition: Csc2dTypes.h:25
conscience_core::axiomes::CscPoint2dOriented::clone
CscPoint2dOriented * clone() const override
Definition: Csc2dTypes.cpp:96
conscience_core::axiomes::CscPoint2d::isInside
bool isInside(const CscRect2d &rectangle) const
Definition: Csc2dTypes.cpp:263
conscience_core::axiomes::CscRect2d::isIncludedInOther
bool isIncludedInOther(const CscRect2d &rectangle) const
Definition: Csc2dTypes.cpp:210
conscience_core::axiomes::CscRect2d::CscRect2d
CscRect2d(double bottomLeftX=0, double bottomLeftY=0, double width=0, double height=0)
Definition: Csc2dTypes.cpp:175
conscience_core::axiomes::CscLine2d::CscLine2d
CscLine2d(const CscPoint2d *first=CscPoint2d::zero(), const CscPoint2d *second=CscPoint2d::zero(), const string &colorHex="#6abc8e", const int width=1)
Definition: Csc2dTypes.cpp:134
conscience_core::axiomes::cloneLines2d
vector< CscLine2d * > cloneLines2d(const vector< CscLine2d * > &originalVector)
Definition: Csc2dTypes.cpp:126
conscience_core::axiomes::CscRect2d::distanceWith
double distanceWith(const CscRect2d &rectangle2) const
Definition: Csc2dTypes.cpp:220
conscience_core::axiomes::CscRect2d::operator=
CscRect2d & operator=(const CscRect2d &other)
Definition: Csc2dTypes.h:124
conscience_core::axiomes::CscPoint2d::getX
double getX() const
Definition: Csc2dTypes.cpp:38
conscience_core::axiomes::CscPoint2d::operator=
CscPoint2d & operator=(const CscPoint2d &other)
Definition: Csc2dTypes.h:32
conscience_core::axiomes::CscPoint2d::toMap
virtual map< string, double > toMap() const
Definition: Csc2dTypes.cpp:42
conscience_core::axiomes::CscPoint2d::operator+
CscPoint2d operator+(const CscPoint2d &other) const
Definition: Csc2dTypes.cpp:31
conscience_core::axiomes::CscPoint2dOriented::getRotation
double getRotation() const
Definition: Csc2dTypes.cpp:90
conscience_core::axiomes::CscPoint2d::operator-
CscPoint2d operator-(const CscPoint2d &other) const
Definition: Csc2dTypes.cpp:34
conscience_core::axiomes::CscRect2d::getWidth
double getWidth() const
Definition: Csc2dTypes.cpp:202
conscience_core::axiomes::CscPoint2d::getY
double getY() const
Definition: Csc2dTypes.cpp:49
conscience_core::axiomes::CscLine2d::getSecond
const CscPoint2d * getSecond() const
Definition: Csc2dTypes.cpp:141
conscience_core::axiomes::CscRect2d::bottomLeft
CscPoint2d bottomLeft
Definition: Csc2dTypes.h:116
conscience_core::axiomes::CscRect2d::center
CscPoint2d center() const
Definition: Csc2dTypes.cpp:194
conscience_core::axiomes::CscRect2d::topRight
CscPoint2d topRight() const
Definition: Csc2dTypes.cpp:187
conscience_core::axiomes::CscLine2d
Definition: Csc2dTypes.h:77
conscience_core::axiomes::CscPoint2d
Definition: Csc2dTypes.h:21
conscience_core::axiomes::CscPoint2d::plus
CscPoint2d plus(const CscPoint2d &other) const
Definition: Csc2dTypes.cpp:25
conscience_core::axiomes::CscPoint2dOriented::toString
string toString() const override
Definition: Csc2dTypes.cpp:104
conscience_core::axiomes::CscPoint2d::toString
virtual string toString() const
Definition: Csc2dTypes.cpp:115
conscience_core::axiomes::CscPoint2dOriented::CscPoint2dOriented
CscPoint2dOriented(const CscPoint2d &point, double rotation)
Definition: Csc2dTypes.cpp:86
conscience_core::axiomes::CscLine2dStylized::getWidth
int getWidth() const
Definition: Csc2dTypes.cpp:168
conscience_core::axiomes::CscLine2d::~CscLine2d
~CscLine2d()
Definition: Csc2dTypes.cpp:145
conscience_core::axiomes::CscRect2d::toString
string toString() const
Definition: Csc2dTypes.cpp:216
conscience_core::axiomes::CscRect2d
Definition: Csc2dTypes.h:114
conscience_core::axiomes::CscPoint2dOriented
Definition: Csc2dTypes.h:165
conscience_core::axiomes::clonePoints2d
vector< const CscPoint2d * > clonePoints2d(const vector< const CscPoint2d * > &originalVector)
Definition: Csc2dTypes.cpp:11
conscience_core::axiomes::CscPoint2d::~CscPoint2d
virtual ~CscPoint2d()=default
conscience_core::axiomes::CscPoint2dOriented::rotation
double rotation
Definition: Csc2dTypes.h:171
conscience_core::axiomes::averageRectangle
CscRect2d averageRectangle(const vector< CscRect2d > &rectangles)
Definition: Csc2dTypes.cpp:63
conscience_core::axiomes::CscPoint2dOriented::zero
static CscPoint2dOriented * zero()
Definition: Csc2dTypes.cpp:83
conscience_core::axiomes::CscLine2dStylized::CscLine2dStylized
CscLine2dStylized(const CscPoint2d *first, const CscPoint2d *second, const string &colorHex="#6abc8e", const int width=1)
Definition: Csc2dTypes.cpp:161
conscience_core::axiomes::CscRect2d::getHeight
double getHeight() const
Definition: Csc2dTypes.cpp:206
conscience_core::axiomes::CscRect2d::bottomRight
CscPoint2d bottomRight() const
Definition: Csc2dTypes.cpp:190
conscience_core::axiomes::CscRect2d::topLeft
CscPoint2d topLeft() const
Definition: Csc2dTypes.cpp:184
conscience_core::axiomes::CscPoint2dOriented::setRotation
void setRotation(double rotation)
Definition: Csc2dTypes.cpp:93
conscience_core::axiomes::CscPoint2d::zero
static CscPoint2d * zero()
Definition: Csc2dTypes.cpp:122
conscience_core::axiomes::CscPoint2dOriented::toMap
map< string, double > toMap() const override
Definition: Csc2dTypes.cpp:99
conscience_core::axiomes::CscPoint2d::minus
CscPoint2d minus(const CscPoint2d &other) const
Definition: Csc2dTypes.cpp:28
conscience_core::axiomes::CscRect2d::getIntersectionOverUnionWith
double getIntersectionOverUnionWith(const CscRect2d &bb2) const
Definition: Csc2dTypes.cpp:226
conscience_core::axiomes::CscPoint2d::x
double x
Definition: Csc2dTypes.h:24