gtsam
Loading...
Searching...
No Matches
SimPolygon2D.h
Go to the documentation of this file.
1
6
7#pragma once
8
11
12#include <map>
13#include <random>
14
15namespace gtsam {
16
20class GTSAM_UNSTABLE_EXPORT SimPolygon2D {
21protected:
22 Point2Vector landmarks_;
23 static std::minstd_rand rng;
24
25public:
26
29
31 static void seedGenerator(size_t seed);
32
34 static SimPolygon2D createTriangle(const Point2& pA, const Point2& pB, const Point2& pC);
35
40 static SimPolygon2D createRectangle(const Point2& p, double height, double width);
41
47 static SimPolygon2D randomTriangle(double side_len, double mean_side_len, double sigma_side_len,
48 double min_vertex_dist, double min_side_len, const std::vector<SimPolygon2D>& existing_polys);
49
55 static SimPolygon2D randomRectangle(double side_len, double mean_side_len, double sigma_side_len,
56 double min_vertex_dist, double min_side_len, const std::vector<SimPolygon2D>& existing_polys);
57
58 // access to underlying points
59 const Point2& landmark(size_t i) const { return landmarks_[i]; }
60 size_t size() const { return landmarks_.size(); }
61 const Point2Vector& vertices() const { return landmarks_; }
62
63 // testable requirements
64 bool equals(const SimPolygon2D& p, double tol=1e-5) const;
65 void print(const std::string& s="") const;
66
70 std::vector<SimWall2D> walls() const;
71
77 bool contains(const Point2& p) const;
78
83 bool overlaps(const SimPolygon2D& p) const;
84
86 static bool anyContains(const Point2& p, const std::vector<SimPolygon2D>& obstacles);
87
89 static bool anyOverlaps(const SimPolygon2D& p, const std::vector<SimPolygon2D>& obstacles);
90
92 static bool insideBox(double s, const Point2& p);
93
95 static bool nearExisting(const Point2Vector& S,
96 const Point2& p, double threshold);
97
99 static Point2 randomPoint2(double s);
100
102 static Rot2 randomAngle();
103
105 static double randomDistance(double mu, double sigma, double min_dist = -1.0);
106
108 static Point2 randomBoundedPoint2(double boundary_size,
109 const Point2Vector& landmarks, double min_landmark_dist);
110
112 static Point2 randomBoundedPoint2(double boundary_size,
113 const Point2Vector& landmarks,
114 const std::vector<SimPolygon2D>& obstacles, double min_landmark_dist);
115
117 static Point2 randomBoundedPoint2(double boundary_size,
118 const std::vector<SimPolygon2D>& obstacles);
119
121 static Point2 randomBoundedPoint2(
122 const Point2& LL_corner, const Point2& UR_corner,
123 const Point2Vector& landmarks,
124 const std::vector<SimPolygon2D>& obstacles, double min_landmark_dist);
125
127 static Pose2 randomFreePose(double boundary_size, const std::vector<SimPolygon2D>& obstacles);
128
129};
130
131typedef std::vector<SimPolygon2D> SimPolygon2DVector;
132
133} //\namespace gtsam
2D Pose
Implementation of walls for use with simulators.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:32
General polygon class for convex polygons.
Definition SimPolygon2D.h:20
SimPolygon2D()
Don't use this constructor, use a named one instead.
Definition SimPolygon2D.h:28