Collision Checker
triangle.h
Go to the documentation of this file.
1 #ifndef TRIANGLE_H_
2 #define TRIANGLE_H_
3 
4 #include <assert.h>
5 #include <Eigen/Dense>
6 #include <iostream>
7 
10 
11 namespace collision {
12 
17 class Triangle : public Shape {
18  public:
19  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
20 
21  Triangle(const Eigen::Vector2d &_v1 = Eigen::Vector2d(0, 0),
22  const Eigen::Vector2d &_v2 = Eigen::Vector2d(0, 0),
23  const Eigen::Vector2d &_v3 = Eigen::Vector2d(0, 0))
24  : Shape(Eigen::Vector2d(0, 0)), v1_(_v1), v2_(_v2), v3_(_v3) {
25  set_center(compute_center());
26  compute_incircle_radius_and_center();
27  segments_.push_back(LineSegment(_v1, _v2));
28  segments_.push_back(LineSegment(_v2, _v3));
29  segments_.push_back(LineSegment(_v3, _v1));
30  }
31 
32  ~Triangle() {}
33 
34  bool rayTrace(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2,
35  std::vector<LineSegment> &intersect) const override;
36 
37  virtual CollisionObjectType getCollisionObjectType() const override {
39  }
40 
41  Triangle(const Triangle &copy);
42  Triangle *clone() const;
43 
44  void print(std::ostringstream &stream) const;
45 
46  ShapeType type() const;
47 
48  Eigen::Vector2d v1() const;
49  Eigen::Vector2d v2() const;
50  Eigen::Vector2d v3() const;
51  Eigen::Vector2d center() const;
52  double incircle_radius() const;
53  Eigen::Vector2d incenter() const;
54 
55  double radius() const {
56  assert(false);
57  return 0;
58  }
59 
60  void set_v1(const Eigen::Vector2d &_v1);
61  void set_v2(const Eigen::Vector2d &_v2);
62  void set_v3(const Eigen::Vector2d &_v3);
63 
64 #if ENABLE_SERIALIZER
65  serialize::ICollisionObjectExport *exportThis(void) const override;
66 #endif
67 
68  std::vector<LineSegment> segments(void) const { return segments_; };
69 
70  private:
71  fcl::CollisionGeometry<FCL_PRECISION> *createFCLCollisionGeometry(
72  void) const override;
73  fcl::CollisionObject<FCL_PRECISION> *createFCLCollisionObject(
74  const std::shared_ptr<fcl::CollisionGeometry<FCL_PRECISION>> &)
75  const override;
76 
77  std::vector<LineSegment> segments_;
78 
79  Eigen::Vector2d compute_center();
80  void compute_incircle_radius_and_center();
81 
82  using Shape::center_;
83  using Shape::radius_;
84 
85  Eigen::Vector2d v1_;
86  Eigen::Vector2d v2_;
87  Eigen::Vector2d v3_;
88 
89  double incircle_radius_;
90  Eigen::Vector2d incenter_;
91 
92  static constexpr ShapeType type_ = TYPE_TRIANGLE;
93 };
94 
95 typedef std::shared_ptr<Triangle> TrianglePtr;
96 typedef std::shared_ptr<const Triangle> TriangleConstPtr;
97 
98 } // namespace collision
99 
100 #endif
void set_center(const Eigen::Vector2d &_center)
Set geometric center of shape.
Definition: shape.cc:22
std::vector< LineSegment > segments(void) const
Definition: triangle.h:68
Eigen::Vector2d v2() const
Definition: triangle.cc:76
double radius_
Definition: shape.h:73
double incircle_radius() const
Definition: triangle.cc:84
Triangle.
Definition: triangle.h:17
Triangle * clone() const
Definition: triangle.cc:14
double radius() const
Definition: triangle.h:55
Eigen::Vector2d v1() const
Definition: triangle.cc:74
Eigen::Vector2d v3() const
Definition: triangle.cc:78
void set_v2(const Eigen::Vector2d &_v2)
Definition: triangle.cc:91
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Triangle(const Eigen::Vector2d &_v1=Eigen::Vector2d(0, 0), const Eigen::Vector2d &_v2=Eigen::Vector2d(0, 0), const Eigen::Vector2d &_v3=Eigen::Vector2d(0, 0))
Definition: triangle.h:21
void print(std::ostringstream &stream) const
Print all parameters of the shape.
Definition: triangle.cc:41
std::shared_ptr< Triangle > TrianglePtr
Definition: triangle.h:95
ShapeType
Definition: shape.h:13
void set_v1(const Eigen::Vector2d &_v1)
Definition: triangle.cc:86
Eigen::Vector2d center() const
Definition: triangle.cc:80
Base prototype for the shape of an obstacle.
Definition: shape.h:25
void set_v3(const Eigen::Vector2d &_v3)
Definition: triangle.cc:96
ShapeType type() const
Get shape type.
Definition: triangle.cc:39
virtual CollisionObjectType getCollisionObjectType() const override
Definition: triangle.h:37
Eigen::Vector2d incenter() const
Definition: triangle.cc:82
Eigen::Vector2d center_
Definition: shape.h:72
std::shared_ptr< const Triangle > TriangleConstPtr
Definition: triangle.h:96
bool rayTrace(const Eigen::Vector2d &point1, const Eigen::Vector2d &point2, std::vector< LineSegment > &intersect) const override
Definition: triangle.cc:23