gtsam 4.2
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(unsigned long 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
134
2D Pose
Implementation of walls for use with simulators.
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:27
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:156
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:27
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