gtsam
Loading...
Searching...
No Matches
SimWall2D.h
Go to the documentation of this file.
1
6
7#pragma once
8
9#include <gtsam_unstable/dllexport.h>
12
13namespace gtsam {
14
19 class GTSAM_UNSTABLE_EXPORT SimWall2D {
20 protected:
21 Point2 a_, b_;
22
23 public:
25 SimWall2D() : a_(1.0, 0.0), b_(1.0, 1.0) {}
26
28 SimWall2D(const Point2& a, const Point2& b)
29 : a_(a), b_(b) {}
30
31 SimWall2D(double ax, double ay, double bx, double by)
32 : a_(ax, ay), b_(bx, by) {}
33
35 void print(const std::string& s="") const;
36 bool equals(const SimWall2D& other, double tol=1e-9) const;
37
39 Point2 a() const { return a_; }
40 Point2 b() const { return b_; }
41
43 SimWall2D scale(double s) const { return SimWall2D(s*a_, s*b_); }
44
46 double length() const { return distance2(a_, b_); }
47 Point2 midpoint() const;
48
54 bool intersects(const SimWall2D& wall, Point2* pt = nullptr) const;
55
60 bool intersects(const SimWall2D& wall, Point2& pt) const {
61 return intersects(wall, &pt);
62 }
63
67 Point2 norm() const;
68
73 Rot2 reflection(const Point2& init, const Point2& intersection) const;
74
75 };
76
77 typedef std::vector<SimWall2D> SimWall2DVector;
78
80 template<> struct traits<SimWall2D> : public Testable<SimWall2D> {};
81
93 std::pair<Pose2, bool> moveWithBounce(const Pose2& cur_pose, double step_size,
94 const std::vector<SimWall2D> walls, Sampler& angle_drift,
95 Sampler& reflect_noise, const Rot2& bias = Rot2());
96
97} // \namespace gtsam
2D Pose
sampling from a NoiseModel
Global functions in a separate testing namespace.
Definition chartTesting.h:28
double distance2(const Point2 &p, const Point2 &q, OptionalJacobian< 1, 2 > H1, OptionalJacobian< 1, 2 > H2)
distance between two points
Definition Point2.cpp:39
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
std::pair< Pose2, bool > moveWithBounce(const Pose2 &cur_pose, double step_size, const std::vector< SimWall2D > walls, Sampler &angle_drift, Sampler &reflect_noise, const Rot2 &bias)
Calculates the next pose in a trajectory constrained by walls, with noise on angular drift and reflec...
Definition SimWall2D.cpp:125
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
A 2D pose (Point2,Rot2).
Definition Pose2.h:39
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:40
Sampling structure that keeps internal random number generators for diagonal distributions specified ...
Definition Sampler.h:32
General Wall class for walls defined around unordered endpoints Primarily to handle ray intersections...
Definition SimWall2D.h:19
Point2 a() const
access
Definition SimWall2D.h:39
bool intersects(const SimWall2D &wall, Point2 *pt=nullptr) const
intersection check between two segments returns true if they intersect, with the intersection point i...
Definition SimWall2D.cpp:28
SimWall2D(const Point2 &a, const Point2 &b)
constructors using endpoints
Definition SimWall2D.h:28
SimWall2D scale(double s) const
scales a wall to produce a new wall
Definition SimWall2D.h:43
double length() const
geometry
Definition SimWall2D.h:46
SimWall2D()
default constructor makes canonical wall
Definition SimWall2D.h:25
bool intersects(const SimWall2D &wall, Point2 &pt) const
An overload of intersects that takes an l-value reference to a Point2 instead of a pointer.
Definition SimWall2D.h:60