Thunderbots Project
Loading...
Searching...
No Matches
geom_obstacle.hpp
1#pragma once
2
3#include "software/ai/navigator/obstacle/obstacle.hpp"
4#include "software/geom/algorithms/closest_point.h"
5#include "software/geom/algorithms/contains.h"
6#include "software/geom/algorithms/distance.h"
7#include "software/geom/algorithms/intersects.h"
8#include "software/geom/algorithms/rasterize.h"
9
10template <typename GEOM_TYPE>
11class GeomObstacle : public Obstacle
12{
13 public:
14 GeomObstacle() = delete;
15
21 explicit GeomObstacle(const GEOM_TYPE& geom);
22
23 bool contains(const Point& p, const double t_sec = 0) const override;
24 double distance(const Point& p, const double t_sec = 0) const override;
25 double signedDistance(const Point& p, const double t_sec = 0) const override;
26 bool intersects(const Segment& segment, const double t_sec = 0) const override;
27 Point closestPoint(const Point& p) const override;
28 TbotsProto::Obstacle createObstacleProto() const override;
29 Rectangle axisAlignedBoundingBox(double inflation_radius = 0) const override;
30 std::string toString(void) const override;
31 void accept(ObstacleVisitor& visitor) const override;
32 std::vector<Point> rasterize(const double resolution_size) const override;
33
39 const GEOM_TYPE getGeom(void) const;
40
41 protected:
42 const GEOM_TYPE geom_;
43};
44
45
46template <typename GEOM_TYPE>
47GeomObstacle<GEOM_TYPE>::GeomObstacle(const GEOM_TYPE& geom) : geom_(geom)
48{
49}
50
51template <typename GEOM_TYPE>
52bool GeomObstacle<GEOM_TYPE>::contains(const Point& p, const double t_sec) const
53{
54 return ::contains(geom_, p);
55}
56
57template <typename GEOM_TYPE>
58double GeomObstacle<GEOM_TYPE>::distance(const Point& p, const double t_sec) const
59{
60 return ::distance(geom_, p);
61}
62
63template <typename GEOM_TYPE>
64double GeomObstacle<GEOM_TYPE>::signedDistance(const Point& p, const double t_sec) const
65{
66 return ::signedDistance(geom_, p);
67}
68
69template <typename GEOM_TYPE>
70bool GeomObstacle<GEOM_TYPE>::intersects(const Segment& segment, const double t_sec) const
71{
72 return ::intersects(geom_, segment);
73}
74
75template <typename GEOM_TYPE>
77{
78 return ::closestPoint(geom_, p);
79}
80
81template <typename GEOM_TYPE>
82std::vector<Point> GeomObstacle<GEOM_TYPE>::rasterize(const double resolution_size) const
83{
84 return ::rasterize(geom_, resolution_size);
85}
86
87template <typename GEOM_TYPE>
89{
90 return ::createObstacleProto(geom_);
91}
92
93template <typename GEOM_TYPE>
95 const double inflation_radius) const
96{
97 return ::axisAlignedBoundingBox(geom_, inflation_radius);
98}
99
100template <typename GEOM_TYPE>
102{
103 std::ostringstream ss;
104 ss << "Obstacle with shape " << geom_;
105 return ss.str();
106}
107
108template <typename GEOM_TYPE>
109const GEOM_TYPE GeomObstacle<GEOM_TYPE>::getGeom(void) const
110{
111 return geom_;
112}
113
114template <typename GEOM_TYPE>
116{
117 visitor.visit(*this);
118}
Definition geom_obstacle.hpp:12
std::string toString(void) const override
Definition geom_obstacle.hpp:101
Rectangle axisAlignedBoundingBox(double inflation_radius=0) const override
Definition geom_obstacle.hpp:94
bool contains(const Point &p, const double t_sec=0) const override
Definition geom_obstacle.hpp:52
double signedDistance(const Point &p, const double t_sec=0) const override
Definition geom_obstacle.hpp:64
void accept(ObstacleVisitor &visitor) const override
Definition geom_obstacle.hpp:115
const GEOM_TYPE getGeom(void) const
Definition geom_obstacle.hpp:109
bool intersects(const Segment &segment, const double t_sec=0) const override
Definition geom_obstacle.hpp:70
double distance(const Point &p, const double t_sec=0) const override
Definition geom_obstacle.hpp:58
Point closestPoint(const Point &p) const override
Definition geom_obstacle.hpp:76
std::vector< Point > rasterize(const double resolution_size) const override
Definition geom_obstacle.hpp:82
TbotsProto::Obstacle createObstacleProto() const override
Definition geom_obstacle.hpp:88
Definition obstacle_visitor.h:23
virtual void visit(const GeomObstacle< Circle > &geom_obstacle)=0
Definition obstacle.hpp:19
Definition point.h:14
Definition rectangle.h:10
Definition segment.h:7