00001
00002 #ifndef vgl_intersection_h_
00003 #define vgl_intersection_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <vgl/vgl_fwd.h>
00020 #include <vgl/vgl_box_2d.h>
00021 #include <vgl/vgl_box_3d.h>
00022 #include <vgl/vgl_point_2d.h>
00023 #include <vgl/vgl_point_3d.h>
00024 #include <vgl/vgl_line_3d_2_points.h>
00025 #include <vgl/vgl_line_segment_3d.h>
00026 #include <vgl/vgl_infinite_line_3d.h>
00027 #include <vcl_vector.h>
00028
00029
00030
00031 template <class T>
00032 inline bool vgl_intersection(vgl_point_2d<T> const& p0,
00033 vgl_point_2d<T> const& p1)
00034 { return p0 == p1; }
00035
00036
00037
00038 template <class T>
00039 inline bool vgl_intersection(vgl_point_3d<T> const& p0,
00040 vgl_point_3d<T> const& p1)
00041 { return p0 == p1; }
00042
00043
00044
00045 template <class T>
00046 bool vgl_intersection(vgl_box_2d<T> const& box,
00047 vgl_line_2d<T> const& line,
00048 vgl_point_2d<T>& p0,
00049 vgl_point_2d<T>& p1);
00050
00051
00052
00053 template <class T>
00054 unsigned vgl_intersection(vgl_box_2d<T> const& box,
00055 vgl_line_segment_2d<T> const& line,
00056 vgl_point_2d<T>& p0,
00057 vgl_point_2d<T>& p1);
00058
00059
00060
00061
00062
00063 template <class T>
00064 vgl_point_3d<T> vgl_intersection(vgl_line_3d_2_points<T> const& l1,
00065 vgl_line_3d_2_points<T> const& l2);
00066
00067
00068
00069
00070 template <class T>
00071 bool vgl_intersection(vgl_line_segment_3d<T> const& l1,
00072 vgl_line_segment_3d<T> const& l2,
00073 vgl_point_3d<T>& i_pnt);
00074
00075
00076
00077
00078 template <class T>
00079 bool vgl_intersection(vgl_line_3d_2_points<T> const& l1,
00080 vgl_line_segment_3d<T> const& l2,
00081 vgl_point_3d<T>& i_pnt);
00082
00083 template <class T> inline
00084 bool vgl_intersection(vgl_line_segment_3d<T> const& l1,
00085 vgl_line_3d_2_points<T> const& l2,
00086 vgl_point_3d<T>& i_pnt)
00087 {
00088 return vgl_intersection(l2, l1, i_pnt);
00089 }
00090
00091
00092
00093 template <class T>
00094 bool vgl_intersection(vgl_infinite_line_3d<T> const& l1,
00095 vgl_infinite_line_3d<T> const& l2,
00096 vgl_point_3d<T>& i_pnt);
00097
00098
00099
00100 template <class T>
00101 bool vgl_intersection(vgl_ray_3d<T> const& r1,
00102 vgl_ray_3d<T> const& r2,
00103 vgl_point_3d<T>& i_pnt);
00104
00105
00106
00107 template <class T>
00108 bool vgl_intersection(vgl_line_2d<T> const& line0,
00109 vgl_line_2d<T> const& line1,
00110 vgl_point_2d<T> &intersection_point );
00111
00112
00113
00114
00115
00116 template <class T>
00117 vgl_point_3d<T> vgl_intersection(vgl_line_3d_2_points<T> const& line,
00118 vgl_plane_3d<T> const& plane);
00119
00120
00121
00122
00123 template <class T>
00124 bool vgl_intersection(vgl_line_segment_3d<T> const& line,
00125 vgl_plane_3d<T> const& plane,
00126 vgl_point_3d<T> & i_pt);
00127
00128
00129
00130
00131
00132 template <class T>
00133 bool vgl_intersection(vgl_infinite_line_3d<T> const& line,
00134 vgl_plane_3d<T> const& plane,
00135 vgl_point_3d<T> & i_pt);
00136
00137
00138
00139
00140 template <class T>
00141 bool vgl_intersection(vgl_ray_3d<T> const& ray,
00142 vgl_plane_3d<T> const& plane,
00143 vgl_point_3d<T> & i_pt);
00144
00145
00146
00147
00148
00149 template <class T>
00150 bool vgl_intersection(vgl_plane_3d<T> const& plane0,
00151 vgl_plane_3d<T> const& plane1,
00152 vgl_line_segment_3d<T> & line){
00153 vgl_infinite_line_3d<T> inf_l;
00154 bool status = vgl_intersection(plane0, plane1, inf_l);
00155 if (status)
00156 line.set(inf_l.point_t(T(0)), inf_l.point_t(T(1)));
00157 return status;
00158 }
00159
00160 template <class T>
00161 bool vgl_intersection(vgl_plane_3d<T> const& plane0,
00162 vgl_plane_3d<T> const& plane1,
00163 vgl_line_3d_2_points<T> & line){
00164 vgl_infinite_line_3d<T> inf_l;
00165 bool status = vgl_intersection(plane0, plane1, inf_l);
00166 if (status)
00167 line.set(inf_l.point_t(T(0)), inf_l.point_t(T(1)));
00168 return status;
00169 }
00170
00171 template <class T>
00172 bool vgl_intersection(vgl_plane_3d<T> const& plane0,
00173 vgl_plane_3d<T> const& plane1,
00174 vgl_infinite_line_3d<T> & line);
00175
00176
00177
00178 template <class T>
00179 vgl_point_3d<T> vgl_intersection(vgl_plane_3d<T> const& p1,
00180 vgl_plane_3d<T> const& p2,
00181 vgl_plane_3d<T> const& p3);
00182
00183
00184
00185
00186
00187
00188 template <class T>
00189 bool vgl_intersection(vgl_point_2d<T> const& p1,
00190 vgl_point_2d<T> const& p2,
00191 vgl_point_2d<T> const& q1,
00192 vgl_point_2d<T> const& q2,
00193 double tol = 1e-6);
00194
00195
00196
00197
00198 template <class T>
00199 inline bool vgl_intersection(vgl_box_2d<T> const& b, vgl_point_2d<T> const& p)
00200 { return b.contains(p); }
00201
00202
00203
00204
00205 template <class T>
00206 inline bool vgl_intersection(vgl_point_2d<T> const& p, vgl_box_2d<T> const& b)
00207 { return b.contains(p); }
00208
00209
00210
00211
00212 template <class T>
00213 inline bool vgl_intersection(vgl_box_3d<T> const& b, vgl_point_3d<T> const& p)
00214 { return b.contains(p); }
00215
00216
00217
00218
00219 template <class T>
00220 inline bool vgl_intersection(vgl_point_3d<T> const& p, vgl_box_3d<T> const& b)
00221 { return b.contains(p); }
00222
00223
00224
00225 template <class T>
00226 bool vgl_intersection(vgl_box_3d<T> const& box,
00227 vgl_infinite_line_3d<T> const& line,
00228 vgl_point_3d<T>& p0,
00229 vgl_point_3d<T>& p1);
00230
00231
00232
00233 template <class T>
00234 bool vgl_intersection(vgl_box_3d<T> const& box,
00235 vgl_ray_3d<T> const& ray,
00236 vgl_point_3d<T>& p0,
00237 vgl_point_3d<T>& p1);
00238
00239
00240
00241 template <class T>
00242 bool vgl_intersection(vgl_box_3d<T> const& b, vgl_plane_3d<T> const& plane);
00243
00244
00245
00246
00247 template <class T>
00248 vgl_box_2d<T> vgl_intersection(vgl_box_2d<T> const&,vgl_box_2d<T> const&);
00249
00250
00251
00252 template <class T>
00253 vgl_box_3d<T> vgl_intersection(vgl_box_3d<T> const&,vgl_box_3d<T> const&);
00254
00255
00256
00257
00258 template <class T>
00259 bool vgl_intersection(vgl_box_2d<T> const& b, vgl_polygon<T> const& poly);
00260
00261
00262
00263
00264 template <class T>
00265 vcl_vector<vgl_point_2d<T> > vgl_intersection(vgl_box_2d<T> const& b, vcl_vector<vgl_point_2d<T> > const& p);
00266
00267
00268
00269
00270 template <class T>
00271 vcl_vector<vgl_point_2d<T> > vgl_intersection(vcl_vector<vgl_point_2d<T> > const& p, vgl_box_2d<T> const& b);
00272
00273
00274
00275
00276 template <class T>
00277 vcl_vector<vgl_point_3d<T> > vgl_intersection(vgl_box_3d<T> const& b, vcl_vector<vgl_point_3d<T> > const& p);
00278
00279
00280
00281
00282 template <class T>
00283 vcl_vector<vgl_point_3d<T> > vgl_intersection(vcl_vector<vgl_point_3d<T> > const& p, vgl_box_3d<T> const& b);
00284
00285
00286
00287
00288 template <class T>
00289 vcl_vector<vgl_point_2d<T> > vgl_intersection(vgl_polygon<T> const& poly,
00290 vgl_line_2d<T> const& line);
00291 template <class T>
00292 vcl_vector<vgl_point_2d<T> > vgl_intersection(vgl_line_2d<T> const& line,
00293 vgl_polygon<T> const& poly){
00294 return vgl_intersection(poly, line);
00295 }
00296 #define VGL_INTERSECTION_INSTANTIATE(T) extern "please include vgl/vgl_intersection.txx first"
00297 #define VGL_INTERSECTION_BOX_INSTANTIATE(T) extern "please include vgl/vgl_intersection.txx first"
00298
00299 #endif // vgl_intersection_h_