ray_3d.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
00053 #ifndef LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_3D_H
00054 #define LASS_GUARDIAN_OF_INCLUSION_PRIM_RAY_3D_H
00055
00056
00057
00058
00059 #include "prim_common.h"
00060 #include "normalizing_policy.h"
00061 #include "parameter_policy.h"
00062 #include "point_3d.h"
00063
00064
00065
00066 namespace lass
00067 {
00068
00069 namespace prim
00070 {
00071
00072 template
00073 <
00074 typename T,
00075 class NormalizingPolicy = Normalized,
00076 class ParameterPolicy = Bounded
00077 >
00078 class Ray3D
00079 {
00080 public:
00081
00082 typedef Ray3D<T, NormalizingPolicy, ParameterPolicy> TSelf;
00083 typedef NormalizingPolicy TNormalizingPolicy;
00084 typedef ParameterPolicy TParameterPolicy;
00085
00086 typedef Point3D<T> TPoint;
00087 typedef typename TPoint::TVector TVector;
00088
00089 typedef typename TPoint::TValue TValue;
00090 typedef typename TPoint::TParam TParam;
00091 typedef typename TPoint::TReference TReference;
00092 typedef typename TPoint::TConstReference TConstReference;
00093 typedef typename TPoint::TNumTraits TNumTraits;
00094
00095 enum { dimension = TPoint::dimension };
00096
00097 template <typename U> struct Rebind
00098 {
00099 typedef Ray3D<U, NormalizingPolicy, ParameterPolicy> Type;
00100 };
00101
00102
00103
00104 Ray3D();
00105 Ray3D(const TPoint& iSupport, const TVector& iDirection);
00106 Ray3D(const TPoint& iSupport, const TVector& iNormalizedDirection, IsAlreadyNormalized);
00107 Ray3D(const TPoint& iSupport, const TPoint& iLookAt);
00108 template <typename NP2, typename PP2> Ray3D(const Ray3D<T, NP2, PP2>& iOther);
00109
00110
00111
00112 const TPoint& support() const;
00113 TPoint& support();
00114
00115 const TVector& direction() const;
00116 void setDirection(const TVector& iDirection);
00117 void lookAt(const TPoint& iLookAt);
00118
00119 const TPoint point(TParam a_t) const;
00120 const TValue t(const TPoint& iPoint) const;
00121
00122 const TVector project(const TVector& iVector) const;
00123 const TVector reject(const TVector& iVector) const;
00124 const TVector reflect(const TVector& iVector) const;
00125 const TPoint project(const TPoint& iPoint) const;
00126 const TVector reject(const TPoint& iPoint) const;
00127 const TPoint reflect(const TPoint& iPoint) const;
00128
00129 const bool isValid() const;
00130
00131 private:
00132
00133 TPoint support_;
00134 TVector direction_;
00135 };
00136
00137
00138
00139 template<typename T, class NP, class PP>
00140 std::ostream& operator<<(std::ostream& oOStream, const Ray3D<T, NP, PP>& iB);
00141
00142 template<typename T, class NP, class PP>
00143 io::XmlOStream& operator<<(io::XmlOStream& oOStream, const Ray3D<T, NP, PP>& iB);
00144
00145
00146
00147 }
00148
00149 }
00150
00151 #include "ray_3d.inl"
00152
00153 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_AABB_3D_H
00154 # include "aabb_3d_ray_3d.h"
00155 #endif
00156
00157 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_PARALLELOGRAM_3D_H
00158 # include "parallelogram_3d_ray_3d.h"
00159 #endif
00160
00161 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_PLANE_3D_H
00162 # include "plane_3d_ray_3d.h"
00163 #endif
00164
00165 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_SIMPLE_POLYGON_3D_H
00166 # include "ray_3d_simple_polygon_3d.h"
00167 #endif
00168
00169 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_SPHERE_3D_H
00170 # include "ray_3d_sphere_3d.h"
00171 #endif
00172
00173 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_TRANSFORMATION_3D_H
00174 # include "ray_3d_transformation_3d.h"
00175 #endif
00176
00177 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_TRIANGLE_3D_H
00178 # include "ray_3d_triangle_3d.h"
00179 #endif
00180
00181 #ifdef LASS_GUARDIAN_OF_INCLUSION_PRIM_LINE_SEGMENT_3D_H
00182 # include "line_segment_3d_ray_3d.h"
00183 #endif
00184
00185 #endif
00186
00187