ray_2d.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_2D_H
00053 #define LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_2D_H
00054
00055
00056
00057
00058 #include "prim_common.h"
00059 #include "normalizing_policy.h"
00060 #include "parameter_policy.h"
00061 #include "point_2d.h"
00062
00063
00064
00065 namespace lass
00066 {
00067
00068 namespace prim
00069 {
00070
00071 template
00072 <
00073 typename T,
00074 class NormalizingPolicy = Normalized,
00075 class ParameterPolicy = Bounded
00076 >
00077 class Ray2D
00078 {
00079 public:
00080
00081 typedef Ray2D<T, NormalizingPolicy, ParameterPolicy> TSelf;
00082 typedef NormalizingPolicy TNormalizingPolicy;
00083 typedef ParameterPolicy TParameterPolicy;
00084
00085 typedef Point2D<T> TPoint;
00086 typedef typename TPoint::TVector TVector;
00087
00088 typedef typename TPoint::TValue TValue;
00089 typedef typename TPoint::TParam TParam;
00090 typedef typename TPoint::TReference TReference;
00091 typedef typename TPoint::TConstReference TConstReference;
00092 typedef typename TPoint::TNumTraits TNumTraits;
00093
00094 enum { dimension = TPoint::dimension };
00095
00096 template <typename U> struct Rebind
00097 {
00098 typedef Ray2D<U, NormalizingPolicy, ParameterPolicy> Type;
00099 };
00100
00101
00102
00103 Ray2D();
00104 Ray2D(const TPoint& iSupport, const TVector& iDirection);
00105 Ray2D(const TPoint& iSupport, const TPoint& iLookAt);
00106
00107
00108
00109 const TPoint& support() const;
00110 TPoint& support();
00111
00112 const TVector& direction() const;
00113 void setDirection(const TVector& iDirection);
00114 void lookAt(const TPoint& iLookAt);
00115
00116 const TPoint point(TParam a_t) const;
00117 const TValue t(const TPoint& iPoint) const;
00118 const TVector project(const TVector& iVector) const;
00119 const TVector reject(const TVector& iVector) const;
00120 const TVector reflect(const TVector& iVector) const;
00121 const TPoint project(const TPoint& iPoint) const;
00122 const TVector reject(const TPoint& iPoint) const;
00123 const TPoint reflect(const TPoint& iPoint) const;
00124
00125 const Side classify(const TPoint& iPoint) const;
00126
00127 const bool isValid() const;
00128
00129 private:
00130
00131 TPoint support_;
00132 TVector direction_;
00133 };
00134
00135
00136
00137 template<typename T, class NP, class PP>
00138 std::ostream& operator<<(std::ostream& oOStream, const Ray2D<T, NP, PP>& iB);
00139
00140 template<typename T, class NP, class PP>
00141 io::XmlOStream& operator<<(io::XmlOStream& oOStream, const Ray2D<T, NP, PP>& iB);
00142
00143
00144
00145 }
00146
00147 }
00148
00149 #include "ray_2d.inl"
00150
00151 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_2D_H
00152 # include "aabb_2d_ray_2d.h"
00153 #endif
00154
00155 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_2D_H
00156 # include "line_2d_ray_2d.h"
00157 #endif
00158
00159 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_2D_H
00160 # include "line_segment_2d_ray_2d.h"
00161 #endif
00162
00163 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_SIMPLE_POLYGON_2D_H
00164 # include "ray_2d_simple_polygon_2d.h"
00165 #endif
00166
00167 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_TRIANGLE_2D_H
00168 # include "ray_2d_triangle_2d.h"
00169 #endif
00170
00171 #endif