aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/G3D/Line.h
diff options
context:
space:
mode:
Diffstat (limited to 'dep/g3dlite/G3D/Line.h')
-rw-r--r--dep/g3dlite/G3D/Line.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/dep/g3dlite/G3D/Line.h b/dep/g3dlite/G3D/Line.h
new file mode 100644
index 00000000000..3579a6becec
--- /dev/null
+++ b/dep/g3dlite/G3D/Line.h
@@ -0,0 +1,105 @@
+/**
+ @file Line.h
+
+ Line class
+
+ @maintainer Morgan McGuire, http://graphics.cs.williams.edu
+
+ @created 2001-06-02
+ @edited 2006-02-28
+ */
+
+#ifndef G3D_LINE_H
+#define G3D_LINE_H
+
+#include "G3D/platform.h"
+#include "G3D/Vector3.h"
+
+namespace G3D {
+
+class Plane;
+
+/**
+ An infinite 3D line.
+ */
+class Line {
+protected:
+
+ Vector3 _point;
+ Vector3 _direction;
+
+ Line(const Vector3& point, const Vector3& direction) {
+ _point = point;
+ _direction = direction.direction();
+ }
+
+public:
+
+ /** Undefined (provided for creating Array<Line> only) */
+ inline Line() {}
+
+ Line(class BinaryInput& b);
+
+ void serialize(class BinaryOutput& b) const;
+
+ void deserialize(class BinaryInput& b);
+
+ virtual ~Line() {}
+
+ /**
+ Constructs a line from two (not equal) points.
+ */
+ static Line fromTwoPoints(const Vector3 &point1, const Vector3 &point2) {
+ return Line(point1, point2 - point1);
+ }
+
+ /**
+ Creates a line from a point and a (nonzero) direction.
+ */
+ static Line fromPointAndDirection(const Vector3& point, const Vector3& direction) {
+ return Line(point, direction);
+ }
+
+ /**
+ Returns the closest point on the line to point.
+ */
+ Vector3 closestPoint(const Vector3& pt) const;
+
+ /**
+ Returns the distance between point and the line
+ */
+ double distance(const Vector3& point) const {
+ return (closestPoint(point) - point).magnitude();
+ }
+
+ /** Returns a point on the line */
+ Vector3 point() const;
+
+ /** Returns the direction (or negative direction) of the line */
+ Vector3 direction() const;
+
+ /**
+ Returns the point where the line and plane intersect. If there
+ is no intersection, returns a point at infinity.
+ */
+ Vector3 intersection(const Plane &plane) const;
+
+
+ /** Finds the closest point to the two lines.
+
+ @param minDist Returns the minimum distance between the lines.
+
+ @cite http://objectmix.com/graphics/133793-coordinates-closest-points-pair-skew-lines.html
+ */
+ Vector3 closestPoint(const Line& B, float& minDist) const;
+
+ inline Vector3 closestPoint(const Line& B) const {
+ float m;
+ return closestPoint(B, m);
+ }
+};
+
+};// namespace
+
+
+#endif