KrisLibrary  1.0.0
Line3D.h
1 #ifndef MATH3D_LINE3D_H
2 #define MATH3D_LINE3D_H
3 
4 #include "AABB3D.h"
5 
6 namespace Math3D {
7 
8 using namespace Math;
9 
10 struct Segment3D;
11 
18 struct Line3D
19 {
20  void setPoints(const Point3D& a, const Point3D& b);
21  void setSegment(const Segment3D& s);
22  void setTransformed(const Line3D&, const Matrix4& xform);
23  Real closestPointParameter(const Point3D& in) const;
24  Real closestPoint(const Point3D& in, Point3D& out) const;
25  Real closestPoint(const Point3D& in, Point3D& out, Real tmin, Real tmax) const; //tmin,tmax limit the range of the parameter t
26  Real distance(const Point3D& pt) const;
27  void eval(Real t, Point3D& out) const;
28  bool intersects(const Line3D&, Real* t=NULL, Real* u=NULL, Real epsilon=0) const;
29  void closestPoint(const Line3D&,Real& t,Real& u) const;
30  void getAABB(AABB3D&, Real tmin=-Inf, Real tmax=Inf) const;
31  bool lineIntersects(const AABB3D&) const;
32  bool rayIntersects(const AABB3D&) const;
34  bool intersects(const AABB3D&, Real& tmin, Real& tmax) const;
35  Real distance(const AABB3D& bb) const;
36  Real distance(const AABB3D& bb, Real& tclosest, Vector3& bbclosest) const;
37  bool Read(File& f);
38  bool Write(File& f) const;
39 
40  Point3D source;
41  Vector3 direction;
42 };
43 
44 std::ostream& operator << (std::ostream& out,const Line3D& line);
45 std::istream& operator >> (std::istream& in,Line3D& line);
46 
47 } //namespace Math3D
48 
49 #endif
A 3D vector class.
Definition: math3d/primitives.h:136
A 3D axis-aligned bounding box.
Definition: AABB3D.h:13
A 4x4 matrix class.
Definition: math3d/primitives.h:626
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:12
A 3D line class.
Definition: Line3D.h:18
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A cross-platform class for reading/writing binary data.
Definition: File.h:47
Definition: Segment3D.h:12