00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GUTZ_RAY_2_H
00021 #define __GUTZ_RAY_2_H
00022
00023 #include "vec2.h"
00024
00025 #include "mathExt.h"
00026
00027 namespace gutz {
00028
00029 template< class T >
00030 class ray2 {
00031 public:
00032 ray2() : p(vec2<T>(0,0)), d(vec2<T>(0,1)) {}
00033 ray2(const vec2<T> &pos, const vec2<T> &dir) : p(pos), d(dir) {}
00034 ray2(const ray2 &r) : d(r.d), p(r.p) {}
00035
00036 inline
00037 ray2 &operator=(const ray2 &r) { d=r.d; p=r.p; return *this; }
00038
00039 ~ray2() {}
00040
00041
00042 inline
00043 vec2<T> pos(const T &t) const
00044 { return vec2<T>(p.x + d.x * t, p.y + d.y * t); }
00045
00046
00047 inline
00048 T intersect(const ray2 &r) const
00049 {
00050 return intersect2D<T>(p.x, p.y, d.x, d.y,
00051 r.p.x, r.p.y, r.d.x, r.d.y);
00052 }
00053
00054
00055 inline
00056 vec2<T> intersectPos(const ray2 &r) const
00057 { return pos(intersect(r)); }
00058
00059
00060 public:
00061 vec2<T> p;
00062 vec2<T> d;
00063
00064 };
00065
00066 }
00067
00068
00069 #endif
00070