3#include <collision2d/sat.hpp>
17 std::string
name()
const override {
return _name; }
19 const std::vector<Polygon> &
obstacles()
const {
return _obstacles; }
21 static std::shared_ptr<PolygonMaze>
loadFromSvg(
const std::string &filename) {
22 auto maze = std::make_shared<PolygonMaze>();
23 maze->_name +=
" " + filename;
25 if (maze->_obstacles.empty()) {
27 (
"Could not find any obstacles in \"" + filename +
"\".").c_str());
30 for (
auto &obstacle : maze->_obstacles)
32 auto min = maze->_obstacles[0].min();
33 auto max = maze->_obstacles[0].max();
34 for (
const auto &o : maze->_obstacles) {
35 const auto new_min = o.min();
36 const auto new_max = o.max();
37 if (new_min.x <
min.x)
min.x = new_min.x;
38 if (new_max.x >
max.x)
max.x = new_max.x;
39 if (new_min.y <
min.y)
min.y = new_min.y;
40 if (new_max.y >
max.y)
max.y = new_max.y;
42 maze->_bounds.setLow(0,
min.x);
43 maze->_bounds.setLow(1,
min.y);
44 maze->_bounds.setHigh(0,
max.x);
45 maze->_bounds.setHigh(1,
max.y);
46 OMPL_INFORM((
"Loaded polygon maze from \"" + filename +
"\".").c_str());
47 OMPL_INFORM(
"\tBounds: [%.2f %.2f] -- [%.2f %.2f]",
min.x,
min.y,
max.x,
54 for (
const auto &poly : _obstacles) {
55 if (collision2d::intersect(collision2d::Point<double>{x, y},
56 (collision2d::Polygon<double>)poly)) {
58 OMPL_DEBUG(
"[%.2f %.2f] collides with polygon %d.", x, y, i);
67 for (
const auto &poly : _obstacles) {
68 if (collision2d::intersect((collision2d::Polygon<double>)polygon,
69 (collision2d::Polygon<double>)poly)) {
80 void to_json(nlohmann::json &j)
override {
81 j[
"type"] =
"polygon";
94 double unit()
const override {
return .2; }
97 std::string _name{
"polygon_maze"};
98 std::vector<Polygon> _obstacles;
Definition: Environment.h:8
double goalTheta() const
Definition: Environment.h:111
double width() const
Definition: Environment.h:34
double startTheta() const
Definition: Environment.h:110
ob::RealVectorBounds _bounds
Definition: Environment.h:137
double height() const
Definition: Environment.h:35
const Point & goal() const
Definition: Environment.h:17
const Point & start() const
Definition: Environment.h:14
Implements a maze consisting of convex shapes as obstacles.
Definition: PolygonMaze.h:13
const std::vector< Polygon > & obstacles() const
Definition: PolygonMaze.h:19
void to_json(nlohmann::json &j) override
Definition: PolygonMaze.h:80
bool collides(double x, double y) override
Definition: PolygonMaze.h:52
double unit() const override
Unit, e.g.
Definition: PolygonMaze.h:94
bool collides(const Polygon &polygon) override
Definition: PolygonMaze.h:66
static std::shared_ptr< PolygonMaze > loadFromSvg(const std::string &filename)
Definition: PolygonMaze.h:21
PolygonMaze()
Definition: PolygonMaze.h:15
std::string name() const override
Definition: PolygonMaze.h:17
static std::vector< Polygon > load(const std::string &filename)
Definition: SvgPolygonLoader.hpp:16
double max(const std::vector< double > &values)
Definition: PathStatistics.hpp:79
double min(const std::vector< double > &values)
Definition: PathStatistics.hpp:73
double x
Definition: Primitives.h:43
double y
Definition: Primitives.h:43
Definition: Primitives.h:145
static PlannerSettings::GlobalSettings settings
Definition: PlannerSettings.h:699