Go to the documentation of this file.00001
00002 #ifndef vgl_plane_3d_h
00003 #define vgl_plane_3d_h
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <vcl_iosfwd.h>
00025 #include <vcl_cassert.h>
00026 #include <vgl/vgl_fwd.h>
00027 #include <vgl/vgl_vector_3d.h>
00028
00029
00030
00031 template <class T>
00032 class vgl_plane_3d
00033 {
00034
00035 T a_;
00036 T b_;
00037 T c_;
00038 T d_;
00039
00040 public:
00041
00042
00043
00044
00045 inline vgl_plane_3d () : a_(0), b_(0), c_(1), d_(0) {}
00046
00047 #if 0
00048
00049 inline vgl_plane_3d (vgl_plane_3d<T> const& pl)
00050 : a_(pl.a()), b_(pl.b()), c_(pl.c()), d_(pl.d()) {}
00051
00052 inline ~vgl_plane_3d () {}
00053
00054 inline vgl_plane_3d<T>& operator=(vgl_plane_3d<T> const& pl)
00055 { a_ = pl.a(); b_ = pl.b(); c_ = pl.c(); d_ = pl.d(); return *this; }
00056 #endif
00057
00058
00059
00060 inline vgl_plane_3d (T ta,T tb,T tc,T td)
00061 : a_(ta), b_(tb), c_(tc), d_(td) { assert(ta||tb||tc); }
00062
00063
00064
00065 inline vgl_plane_3d (const T v[4])
00066 : a_(v[0]), b_(v[1]), c_(v[2]), d_(v[3]) { assert(a_||b_||c_); }
00067
00068
00069 vgl_plane_3d (vgl_homg_plane_3d<T> const& p);
00070
00071
00072
00073 vgl_plane_3d (vgl_vector_3d<T> const& normal,
00074 vgl_point_3d<T> const& p);
00075
00076
00077
00078 vgl_plane_3d (vgl_point_3d<T> const& p1,
00079 vgl_point_3d<T> const& p2,
00080 vgl_point_3d<T> const& p3);
00081
00082
00083
00084
00085 inline T a() const {return a_;}
00086 inline T nx() const {return a_;}
00087
00088 inline T b() const {return b_;}
00089 inline T ny() const {return b_;}
00090
00091 inline T c() const {return c_;}
00092 inline T nz() const {return c_;}
00093
00094 inline T d() const {return d_;}
00095
00096
00097 inline void set(T ta,T tb,T tc,T td) { assert(ta||tb||tc); a_=ta; b_=tb; c_=tc; d_=td; }
00098
00099
00100
00101 bool operator==( vgl_plane_3d<T> const& p) const;
00102 inline bool operator!=( vgl_plane_3d<T>const& p) const { return !operator==(p); }
00103
00104
00105
00106 inline bool ideal(T = (T)0) const { return false; }
00107
00108
00109 inline vgl_vector_3d<T> normal() const
00110 { return normalized(vgl_vector_3d<T>(a(),b(),c())); }
00111
00112
00113 bool contains(vgl_point_3d<T> const& p, T tol = (T)0) const;
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 bool plane_coords(vgl_point_3d<T> const& p3d,
00128 vgl_point_2d<T>& p2d, T tol=(T)0 ) const;
00129
00130
00131 vgl_point_3d<T> world_coords(vgl_point_2d<T> const& p2d) const;
00132
00133
00134 void plane_coord_vectors(vgl_vector_3d<T>& uvec,
00135 vgl_vector_3d<T>& vvec) const;
00136 };
00137
00138
00139
00140 template <class T> inline
00141 bool is_ideal(vgl_plane_3d<T> const&, T tol=(T)0) { return false; }
00142
00143
00144
00145
00146 template <class T>
00147 vcl_ostream& operator<<(vcl_ostream& s, const vgl_plane_3d<T>& p);
00148
00149
00150
00151
00152
00153
00154
00155 template <class T>
00156 vcl_istream& operator>>(vcl_istream& is, vgl_plane_3d<T>& p);
00157
00158 #define VGL_PLANE_3D_INSTANTIATE(T) extern "please include vgl/vgl_plane_3d.txx first"
00159
00160 #endif // vgl_plane_3d_h