KrisLibrary  1.0.0
geometry2d.h
1 #ifndef MATH3D_GEOMETRY2D_H
2 #define MATH3D_GEOMETRY2D_H
3 
4 #include "AABB2D.h"
5 #include "Line2D.h"
6 #include "Ray2D.h"
7 #include "Segment2D.h"
8 #include "Plane2D.h"
9 #include "Triangle2D.h"
10 #include "Box2D.h"
11 #include "Circle2D.h"
12 //#include "Ellipse2D.h"
13 #include "Polygon2D.h"
14 #include <KrisLibrary/utils/AnyValue.h>
15 #include <vector>
16 
17 namespace Math3D {
18 
20 {
21  public:
22  enum Type { Empty, Point, Segment, AABB, Triangle, Circle, Box };
23 
26  GeometricPrimitive2D(const Vector2& point);
27  GeometricPrimitive2D(const Segment2D& segment);
28  GeometricPrimitive2D(const AABB2D& aabb);
29  GeometricPrimitive2D(const Box2D& box);
30  GeometricPrimitive2D(const Circle2D& circle);
31  GeometricPrimitive2D(const Triangle2D& triangle);
32  static const char* TypeName(Type type);
33  const char* TypeName() const { return GeometricPrimitive2D::TypeName(type); }
34  void Set(const Vector2& point);
35  void Set(const Segment2D& segment);
36  void Set(const AABB2D& aabb);
37  void Set(const Box2D& box);
38  void Set(const Circle2D& circle);
39  void Set(const Triangle2D& triangle);
40  AABB2D GetAABB() const;
41  Box2D GetBB() const;
42  RigidTransform GetFrame() const;
43  void Transform(const RigidTransform2D& T);
44  void ToPolygon(std::vector<Vector2>& outline,int divs=32) const;
45 
46  static bool SupportsCollides(Type a,Type b);
47  bool SupportsCollides(Type b) const { return GeometricPrimitive2D::SupportsCollides(type,b); }
48  bool Collides(const GeometricPrimitive2D& geom) const;
49  bool Collides(const Vector2& point) const;
50  bool Collides(const Segment2D& segment) const;
51  bool Collides(const AABB2D& aabb) const;
52  bool Collides(const Box2D& box) const;
53  bool Collides(const Circle2D& circle) const;
54  bool Collides(const Triangle2D& triangle) const;
55  static bool SupportsDistance(Type a,Type b);
56  bool SupportsDistance(Type b) { return GeometricPrimitive2D::SupportsDistance(type,b); }
57  Real Distance(const GeometricPrimitive2D& geom) const;
58  Real Distance(const Vector2& x) const;
59  Real Distance(const Segment2D& segment) const;
60  Real Distance(const AABB2D& aabb) const;
61  Real Distance(const Box2D& box) const;
62  Real Distance(const Circle2D& circle) const;
63  Real Distance(const Triangle2D& triangle) const;
64 
65  Type type;
66  AnyValue data;
67 };
68 
69 } //Math3D
70 
71 #endif
72 
A 2D circle class.
Definition: Circle2D.h:16
A 2D triangle class.
Definition: Triangle2D.h:25
A polymorphic container class that can contain data of any type.
Definition: AnyValue.h:25
A 2D boxThe box is the unit square [0,1]^2 set in the scaled local coordinate system. That is, one corner is at the origin, and it has dimensions [dims.x,dims.y] in the coordinates given by {xbasis,ybasis}.
Definition: Box2D.h:20
A rigid-body transformation.
Definition: math3d/primitives.h:820
Definition: geometry2d.h:19
A 2D segment class.
Definition: Segment2D.h:17
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:12
A 2D vector class.
Definition: math3d/primitives.h:41
A 2D axis-aligned bounding box.
Definition: AABB2D.h:13
Same as above, but in 2D.
Definition: math3d/primitives.h:902