NRE_Plane.hpp
Go to the documentation of this file.
1 
10  #pragma once
11 
12  #include "../Vector/3D/NRE_Vector3D.hpp"
13  #include "../Vector/4D/NRE_Vector4D.hpp"
14  #include <Utility/Interfaces/Stringable/NRE_Stringable.hpp>
15 
20  namespace NRE {
25  namespace Math {
26 
31  enum Face {
32  TOP,
34  LEFT,
36  NEAR,
37  FAR,
40  };
41 
46  template <class T>
47  class Plane : public Utility::Stringable<Plane<T>> {
48  private : //Fields
49  Vector3D<T> normal;
50  Point3D<T> point;
52  public : // Methods
53  //## Constructor ##//
57  constexpr Plane() = default;
63  template <class K, class L>
64  constexpr Plane(Vector4D<K> const& n, Point4D<L> const& p);
70  template <class K, class L>
71  constexpr Plane(Vector3D<K> const& n, Point3D<L> const& p);
78  template <class K, class L, class N>
79  Plane(Point4D<K> const& p1, Point4D<L> const& p2, Point4D<N> const& p3);
86  template <class K, class L, class N>
87  Plane(Point3D<K> const& p1, Point3D<L> const& p2, Point3D<N> const& p3);
88 
89  //## Copy-Constructor ##//
94  constexpr Plane(Plane const& p) = default;
95 
96  //## Move-Constructor ##//
101  constexpr Plane(Plane && p) = default;
102 
103  //## Convertor ##//
108  template <class K>
109  constexpr Plane(Plane<K> const& p);
110 
111  //## Deconstructor ##//
115  ~Plane() = default;
116 
117  //## Getter ##//
121  constexpr Vector3D<T> const& getNormal() const;
125  constexpr Point3D<T> const& getPoint() const;
126 
127  //## Setter ##//
132  template <class K>
133  constexpr void setNormal(Vector4D<K> const& n);
138  template <class K>
139  constexpr void setNormal(Vector3D<K> const& n);
144  template <class K>
145  constexpr void setPoint(Point4D<K> const& p);
150  template <class K>
151  constexpr void setPoint(Point3D<K> const& p);
157  template <class K, class L>
158  constexpr void setNormalAndPoint(Vector4D<K> const& n, Point4D<L> const& p);
164  template <class K, class L>
165  constexpr void setNormalAndPoint(Vector3D<K> const& n, Point3D<L> const& p);
166 
167  //## Methods ##//
173  template <class K>
174  constexpr std::common_type_t<T, K> distance(Point4D<K> const& p) const;
180  template <class K>
181  constexpr std::common_type_t<T, K> distance(Point3D<K> const& p) const;
182 
183  //## Assignment Operator ##//
189  constexpr Plane& operator =(Plane const& p) = default;
195  constexpr Plane& operator =(Plane && p) = default;
201  template <class K>
202  constexpr Plane& operator =(Plane<K> const& p) ;
208  template <class K>
209  constexpr Plane& operator =(Plane<K> && p);
210 
211  //## Comparison Operator ##//
217  template <class K>
218  constexpr bool operator ==(Plane<K> const& p) const;
224  template <class K>
225  constexpr bool operator !=(Plane<K> const& p) const;
226 
227  //## Stream Operator ##//
232  Utility::String toString() const;
233 
234  private: // Methods
241  template <class K, class L, class N>
242  inline void computeNormalFrom3Points(Point3D<K> const& p1, Point3D<L> const& p2, Point3D<N> const& p3);
243  };
244  }
245  }
246 
247  #include "NRE_Plane.tpp"
constexpr bool operator!=(Plane< K > const &p) const
constexpr Vector3D< T > const & getNormal() const
Definition: NRE_Plane.hpp:35
constexpr bool operator==(Plane< K > const &p) const
Definition: NRE_Plane.hpp:39
Definition: NRE_Plane.hpp:34
Math&#39;s API.
Definition: NRE_Plane.hpp:32
Definition: NRE_Plane.hpp:33
A cartesian 3D vector, 2D homogeneous.
Definition: NRE_Matrix3x3.hpp:33
constexpr std::common_type_t< T, K > distance(Point4D< K > const &p) const
Definition: NRE_Plane.hpp:37
Definition: NRE_Plane.hpp:36
A cartesian plane with a point and a vector.
Definition: NRE_Matrix4x4.hpp:36
The NearlyRealEngine&#39;s global namespace.
A cartesian 4D vector, 3D homogeneous.
Definition: NRE_Matrix4x4.hpp:34
constexpr Plane()=default
constexpr void setNormalAndPoint(Vector4D< K > const &n, Point4D< L > const &p)
Face
Definition: NRE_Plane.hpp:31
constexpr void setNormal(Vector4D< K > const &n)
~Plane()=default
constexpr Point3D< T > const & getPoint() const
constexpr void setPoint(Point4D< K > const &p)
constexpr Plane & operator=(Plane const &p)=default
Utility::String toString() const