/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __NPLANE__ #define __NPLANE__ #include "math/vector.h" namespace GS { /*! @short Plane. ax + by + cz + d = 0 @author Emmanuel Julien (ejulien@nworks.fr) */ class Plane { float d; ///< Distance to origin. Vector4 p, n; ///< Point in plane and normal. public: /// Return plane normal. inline const Vector4 &GetNormal() const { return n; } /*! @short Return point distance to plane. Distance is signed, positive when the point is in front of the plane, negative otherwise. */ inline float DistanceToPlane(const Vector4 &p) const { return p.Dot(n) + d; } /// Set plane from point/normal and an optional transformation matrix. void Set(const Vector4 *_p, const Vector4 &_n, const Matrix4 * = 0); /// Set plane three vectors and an optional transformation matrix. void Set(const Vector4 _p[3], const Matrix4 * = 0); Plane(); Plane(const Vector4 &_p, const Vector4 &_n, const Matrix4 *_m = 0) { Set(&_p, _n, _m); } }; } // GS #endif // __NPLANE__