KrisLibrary  1.0.0
Line2D.h
1 #ifndef MATH3D_LINE2D_H
2 #define MATH3D_LINE2D_H
3 
4 #include "Point.h"
5 
6 namespace Math3D {
7 
8 using namespace Math;
9 
10 struct AABB2D;
11 struct Segment2D;
12 
19 struct Line2D
20 {
21  void setPoints(const Point2D& a, const Point2D& b);
22  void setSegment(const Segment2D& s);
23  void setTransformed(const Line2D&, const Matrix3& xform);
24  Real closestPointParameter(const Point2D& in) const;
25  Real closestPoint(const Point2D& in, Point2D& out) const;
26  Real closestPoint(const Point2D& in, Point2D& out, Real tmin, Real tmax) const;
27  Real distance(const Point2D& pt) const;
28  void eval(Real t, Point2D& out) const;
29  Real orientation(const Point2D& p) const;
30  bool isLeft(const Point2D& p) const { return orientation(p) > Zero; }
31  bool isRight(const Point2D& p) const { return orientation(p) < Zero; }
32  bool Read(File& f);
33  bool Write(File& f) const;
34 
35  void getAABB(AABB2D&, Real tmin=-Inf, Real tmax=Inf) const;
36  bool lineIntersects(const AABB2D&) const;
37  bool rayIntersects(const AABB2D&) const;
39  bool intersects(const AABB2D&, Real& tmin, Real& tmax) const;
40 
41  Point2D source;
42  Vector2 direction;
43 };
44 
45 } //namespace Math3D
46 
47 #endif
A 2D line class.
Definition: Line2D.h:19
A 2D segment class.
Definition: Segment2D.h:17
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
A 3x3 matrix class.
Definition: math3d/primitives.h:469
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A 2D vector class.
Definition: math3d/primitives.h:41
A 2D axis-aligned bounding box.
Definition: AABB2D.h:13
A cross-platform class for reading/writing binary data.
Definition: File.h:47