Initial revision
[0ad:0ad.git] / terrain / Plane.h
1 //***********************************************************
2 //
3 // Name:                Plane.H
4 // Last Update: 17/2/02
5 // Author:              Poya Manouchehri
6 //
7 // Description: A Plane in R3 and several utility methods. 
8 //                              Note that the format used for the plane
9 //                              equation is Ax + By + Cz + D = 0, where 
10 //                              <A,B,C> is the normal vector.
11 //
12 //***********************************************************
13
14 #ifndef PLANE_H
15 #define PLANE_H
16
17 #include "Vector3D.H"
18
19 enum PLANESIDE
20 {
21         PS_FRONT,
22         PS_BACK,
23         PS_ON
24 };
25
26 class CPlane
27 {
28         public:
29                 CPlane ();
30
31                 //sets the plane equation from 3 points on that plane
32                 void Set (CVector3D &p1, CVector3D &p2, CVector3D &p3);
33
34                 //sets the plane equation from a normal and a point on 
35                 //that plane
36                 void Set (CVector3D &norm, CVector3D &point);
37
38                 //normalizes the plane equation
39                 void Normalize ();
40
41                 //returns the side of the plane on which this point
42                 //lies.
43                 PLANESIDE ClassifyPoint (CVector3D &point);
44
45                 //solves the plane equation for a particular point
46                 float DistanceToPlane (CVector3D &point);
47
48                 //calculates the intersection point of a line with this
49                 //plane. Returns false if there is no intersection
50                 bool FindLineSegIntersection (CVector3D &start, CVector3D &end, CVector3D *intsect);
51                 bool FindRayIntersection (CVector3D &start, CVector3D &direction, CVector3D *intsect);
52
53         public:
54                 CVector3D m_Norm;       //normal vector of the plane
55                 float m_Dist;           //Plane distance (ie D in the plane eq.)
56 };
57
58 #endif