Roomba Controller Dashboard 1
A GUI and TCP client application that is used to control a Roomba for Computer Engineering 2880 @ Iowa State
Loading...
Searching...
No Matches
Pose2D.hpp
Go to the documentation of this file.
1//
2// Created by caleb on 10/24/2024
3//
4
5
6#ifndef POSE2D_H
7#define POSE2D_H
8
9#include <cmath>
10#include <cstdint>
11#include <sstream>
12#include <ostream>
13
17#define BOT_RADIUS 6
18
23class Pose2D {
24 protected:
25 double x, y, heading;
26
27 public:
34 Pose2D(double x, double y, double heading);
35
41 Pose2D(double x, double y);
42
46 Pose2D();
47
53 Pose2D(const Pose2D& position);
54 // Pose2D(Pose2D* position);
60 [[nodiscard]] double angleTo(const Pose2D& other) const;
61
67 [[nodiscard]] double distanceTo(const Pose2D& other) const;
68
74 [[nodiscard]] double squareOfDistanceTo(const Pose2D& other) const;
75
82 static Pose2D fromPolar(double magnitude, double angle);
83
89 static double degreesToRadians(double degrees);
90
96 static double radiansToDegrees(double radians);
97
102 [[nodiscard]] Pose2D clone() const;
103
108 void rotateByPose(const Pose2D& rotation);
109
115 void rotateByAngle(double angle);
116
122 void translateByPose(const Pose2D& translation);
123
131 void translateByMagnitude(double magnitude);
132
137 void transformPose(const Pose2D& modifier);
138
143 [[nodiscard]] double getX() const;
144
149 [[nodiscard]] double getY() const;
150
155 [[nodiscard]] double getHeading() const;
156
161 void setHeading(double angle);
162
167 void plusCoord(const Pose2D& other);
168
174 void plus(const Pose2D& other);
175
181 void minus(Pose2D other);
182
187 void addAngle(double angle);
188
194 [[nodiscard]] Pose2D subtractBy(const Pose2D& other) const;
195
201 [[nodiscard]] Pose2D scaleBy(double scaler) const;
202
207 [[nodiscard]] Pose2D normalize() const;
208
214 [[nodiscard]] double dotProduct(const Pose2D& other) const;
215
222 friend std::ostream &operator<<(std::ostream &os, const Pose2D &d);
223
228 void setX(double x);
229
235 void vecAdd(double angle, double magnitude);
236
241 void setY(double y);
242
254 [[nodiscard]] uint8_t getQuadrant() const;
255
259 void wrapHeading();
260
265 void transformForPose(const Pose2D& other);
266
272 static Pose2D parseFromStream(std::istringstream& stream);
273
280 // static SlopeIntercept getSlopeIntercept(Pose2D one, Pose2D two);
281
282
288 bool isOnLine(Pose2D LineEnd1, Pose2D LineEnd2);
289
293 bool isPerpendicularToLine(double m);
294
302 static double getAngleBetweenPoints(Pose2D corner, Pose2D end1, Pose2D end2);
303
307 void multiply(double d);
308};
309
313struct Rectangle {
315};
316
324Rectangle makeRectangleFromLine(const Pose2D& L1, const Pose2D& L2, double width);
325
326#endif //POSE2D_H
327
Rectangle makeRectangleFromLine(const Pose2D &L1, const Pose2D &L2, double width)
Definition Pose2D.cpp:248
void translateByPose(const Pose2D &translation)
Definition Pose2D.cpp:132
void setHeading(double angle)
Definition Pose2D.cpp:159
void multiply(double d)
Definition Pose2D.cpp:267
void rotateByAngle(double angle)
Definition Pose2D.cpp:116
Pose2D()
Definition Pose2D.cpp:18
double angleTo(const Pose2D &other) const
Definition Pose2D.cpp:78
void setY(double y)
Definition Pose2D.cpp:167
static double radiansToDegrees(double radians)
Pose2D clone() const
Definition Pose2D.cpp:106
static Pose2D fromPolar(double magnitude, double angle)
Definition Pose2D.cpp:193
double dotProduct(const Pose2D &other) const
Definition Pose2D.cpp:226
double heading
Definition Pose2D.hpp:25
bool isOnLine(Pose2D LineEnd1, Pose2D LineEnd2)
Definition Pose2D.cpp:24
double x
Definition Pose2D.hpp:25
void transformForPose(const Pose2D &other)
Definition Pose2D.cpp:94
void wrapHeading()
Definition Pose2D.cpp:235
void plus(const Pose2D &other)
Definition Pose2D.cpp:100
static Pose2D parseFromStream(std::istringstream &stream)
Definition Pose2D.cpp:204
void transformPose(const Pose2D &modifier)
Definition Pose2D.cpp:142
double squareOfDistanceTo(const Pose2D &other) const
Definition Pose2D.cpp:90
void addAngle(double angle)
Definition Pose2D.cpp:82
double y
Definition Pose2D.hpp:25
void translateByMagnitude(double magnitude)
Definition Pose2D.cpp:137
friend std::ostream & operator<<(std::ostream &os, const Pose2D &d)
Definition Pose2D.cpp:230
double distanceTo(const Pose2D &other) const
Definition Pose2D.cpp:86
uint8_t getQuadrant() const
Definition Pose2D.cpp:171
double getHeading() const
Definition Pose2D.cpp:155
void vecAdd(double angle, double magnitude)
Definition Pose2D.cpp:110
Pose2D scaleBy(double scaler) const
Definition Pose2D.cpp:217
Pose2D normalize() const
Definition Pose2D.cpp:221
void plusCoord(const Pose2D &other)
Definition Pose2D.cpp:123
static double getAngleBetweenPoints(Pose2D corner, Pose2D end1, Pose2D end2)
double getY() const
Definition Pose2D.cpp:151
static double degreesToRadians(double degrees)
Definition Pose2D.cpp:200
Pose2D subtractBy(const Pose2D &other) const
Definition Pose2D.cpp:213
double getX() const
Definition Pose2D.cpp:147
bool isPerpendicularToLine(double m)
void minus(Pose2D other)
Definition Pose2D.cpp:187
void rotateByPose(const Pose2D &rotation)
Definition Pose2D.cpp:128
void setX(double x)
Definition Pose2D.cpp:163
Pose2D r3
Definition Pose2D.hpp:314
Pose2D r1
Definition Pose2D.hpp:314
Pose2D r2
Definition Pose2D.hpp:314
Pose2D r4
Definition Pose2D.hpp:314