root/trunk/dep/include/g3dlite/G3D/Line.h @ 2

Revision 2, 1.7 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1/**
2 @file Line.h
3 
4 Line class
5 
6 @maintainer Morgan McGuire, matrix@graphics3d.com
7 
8 @created 2001-06-02
9 @edited  2006-02-28
10 */
11
12#ifndef G3D_LINE_H
13#define G3D_LINE_H
14
15#include "G3D/platform.h"
16#include "G3D/Vector3.h"
17
18namespace G3D {
19
20class Plane;
21
22/**
23 An infinite 3D line.
24 */
25class Line {
26protected:
27
28    Vector3 _point;
29    Vector3 _direction;
30
31    Line(const Vector3& point, const Vector3& direction) {
32        _point     = point;
33        _direction = direction.direction();
34    }
35
36public:
37
38    /** Undefined (provided for creating Array<Line> only) */
39    inline Line() {}
40
41    virtual ~Line() {}
42
43    /**
44      Constructs a line from two (not equal) points.
45     */
46    static Line fromTwoPoints(const Vector3 &point1, const Vector3 &point2) {
47        return Line(point1, point2 - point1);
48    }
49
50    /**
51      Creates a line from a point and a (nonzero) direction.
52     */
53    static Line fromPointAndDirection(const Vector3& point, const Vector3& direction) {
54        return Line(point, direction);
55    }
56
57    /**
58      Returns the closest point on the line to point.
59     */
60    Vector3 closestPoint(const Vector3& pt) const;
61
62    /**
63      Returns the distance between point and the line
64     */
65    double distance(const Vector3& point) const {
66        return (closestPoint(point) - point).magnitude();
67    }
68
69    /** Returns a point on the line */
70    Vector3 point() const;
71
72    /** Returns the direction (or negative direction) of the line */
73    Vector3 direction() const;
74
75    /**
76     Returns the point where the line and plane intersect.  If there
77     is no intersection, returns a point at infinity.
78     */
79    Vector3 intersection(const Plane &plane) const;
80};
81
82};// namespace
83
84
85#endif
Note: See TracBrowser for help on using the browser.