00001
00002 #ifndef vgl_closest_point_h_
00003 #define vgl_closest_point_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <vgl/vgl_fwd.h>
00026 #include <vcl_utility.h>
00027
00028
00029 template <class T>
00030 void vgl_closest_point_to_linesegment(T& ret_x, T& ret_y,
00031 T x1, T y1,
00032 T x2, T y2,
00033 T x, T y);
00034
00035
00036 template <class T>
00037 void vgl_closest_point_to_linesegment(T& ret_x, T& ret_y, T& ret_z,
00038 T x1, T y1, T z1,
00039 T x2, T y2, T z2,
00040 T x, T y, T z);
00041
00042
00043
00044 template <class T>
00045 int vgl_closest_point_to_non_closed_polygon(T& ret_x, T& ret_y,
00046 T const px[], T const py[], unsigned int n,
00047 T x, T y);
00048
00049
00050
00051 template <class T>
00052 int vgl_closest_point_to_non_closed_polygon(T& ret_x, T& ret_y, T& ret_z,
00053 T const px[], T const py[], T const pz[], unsigned int n,
00054 T x, T y, T z);
00055
00056
00057
00058 template <class T>
00059 int vgl_closest_point_to_closed_polygon(T& ret_x, T& ret_y,
00060 T const px[], T const py[], unsigned int n,
00061 T x, T y);
00062
00063
00064
00065 template <class T>
00066 int vgl_closest_point_to_closed_polygon(T& ret_x, T& ret_y, T& ret_z,
00067 T const px[], T const py[], T const pz[], unsigned int n,
00068 T x, T y, T z);
00069
00070
00071
00072
00073 template <class T>
00074 vgl_point_2d<T> vgl_closest_point_origin(vgl_line_2d<T> const& l);
00075
00076
00077
00078
00079 template <class T>
00080 vgl_homg_point_2d<T> vgl_closest_point_origin(vgl_homg_line_2d<T> const& l);
00081
00082
00083
00084
00085 template <class T>
00086 vgl_point_3d<T> vgl_closest_point_origin(vgl_plane_3d<T> const& pl);
00087
00088
00089
00090
00091 template <class T>
00092 vgl_homg_point_3d<T> vgl_closest_point_origin(vgl_homg_plane_3d<T> const& pl);
00093
00094
00095
00096
00097 template <class T>
00098 vgl_point_3d<T> vgl_closest_point_origin(vgl_line_3d_2_points<T> const& l);
00099
00100
00101
00102
00103 template <class T>
00104 vgl_homg_point_3d<T> vgl_closest_point_origin(vgl_homg_line_3d_2_points<T> const& l);
00105
00106
00107
00108
00109 template <class T>
00110 vgl_point_2d<T> vgl_closest_point(vgl_line_2d<T> const& l,
00111 vgl_point_2d<T> const& p);
00112 template <class T> inline
00113 vgl_point_2d<T> vgl_closest_point(vgl_point_2d<T> const& p,
00114 vgl_line_2d<T> const& l)
00115 { return vgl_closest_point(l,p); }
00116
00117
00118
00119
00120 template <class T>
00121 vgl_homg_point_2d<T> vgl_closest_point(vgl_homg_line_2d<T> const& l,
00122 vgl_homg_point_2d<T> const& p);
00123 template <class T> inline
00124 vgl_homg_point_2d<T> vgl_closest_point(vgl_homg_point_2d<T> const& p,
00125 vgl_homg_line_2d<T> const& l)
00126 { return vgl_closest_point(l,p); }
00127
00128
00129
00130
00131 template <class T>
00132 vgl_point_3d<T> vgl_closest_point(vgl_plane_3d<T> const& pl,
00133 vgl_point_3d<T> const& p);
00134 template <class T> inline
00135 vgl_point_3d<T> vgl_closest_point(vgl_point_3d<T> const& p,
00136 vgl_plane_3d<T> const& pl)
00137 { return vgl_closest_point(pl,p); }
00138
00139
00140
00141
00142 template <class T>
00143 vgl_homg_point_3d<T> vgl_closest_point(vgl_homg_plane_3d<T> const& pl,
00144 vgl_homg_point_3d<T> const& p);
00145 template <class T> inline
00146 vgl_homg_point_3d<T> vgl_closest_point(vgl_homg_point_3d<T> const& p,
00147 vgl_homg_plane_3d<T> const& pl)
00148 { return vgl_closest_point(pl,p); }
00149
00150
00151
00152
00153
00154
00155 template <class T>
00156 vgl_point_2d<T> vgl_closest_point(vgl_polygon<T> const& poly,
00157 vgl_point_2d<T> const& point,
00158 bool closed=true);
00159
00160 template <class T> inline
00161 vgl_point_2d<T> vgl_closest_point(vgl_point_2d<T> const& point,
00162 vgl_polygon<T> const& poly,
00163 bool closed=true)
00164 { return vgl_closest_point(poly, point, closed); }
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 template <class T>
00192 vcl_pair<vgl_homg_point_3d<T>, vgl_homg_point_3d<T> >
00193 vgl_closest_points(vgl_homg_line_3d_2_points<T> const& line1,
00194 vgl_homg_line_3d_2_points<T> const& line2);
00195
00196
00197
00198
00199
00200 template <class T>
00201 vgl_homg_point_3d<T> vgl_closest_point(vgl_homg_line_3d_2_points<T> const& l,
00202 vgl_homg_point_3d<T> const& p);
00203
00204 template <class T> inline
00205 vgl_homg_point_3d<T> vgl_closest_point(vgl_homg_point_3d<T> const& p,
00206 vgl_homg_line_3d_2_points<T> const& l)
00207 { return vgl_closest_point(l,p); }
00208
00209
00210
00211
00212 template <class T>
00213 vgl_point_3d<T> vgl_closest_point(vgl_line_3d_2_points<T> const& l,
00214 vgl_point_3d<T> const& p);
00215
00216 template <class T> inline
00217 vgl_point_3d<T> vgl_closest_point(vgl_point_3d<T> const& p,
00218 vgl_line_3d_2_points<T> const& l)
00219 { return vgl_closest_point(l,p); }
00220
00221 template <class T> inline
00222 vgl_point_3d<T> vgl_closest_point(vgl_point_3d<T> const& p,
00223 vgl_infinite_line_3d<T> const& l){
00224 vgl_line_3d_2_points<T> l2(l.point(), l.point_t(T(1)));
00225 return vgl_closest_point(p,l2);}
00226
00227 template <class T> inline
00228 vgl_point_3d<T> vgl_closest_point(vgl_infinite_line_3d<T> const& l,
00229 vgl_point_3d<T> const& p){
00230 return vgl_closest_point(p,l);}
00231
00232 template <class T>
00233 vgl_point_3d<T> vgl_closest_point(vgl_point_3d<T> const& p,
00234 vgl_ray_3d<T> const& r);
00235
00236 template <class T> inline
00237 vgl_point_3d<T> vgl_closest_point(vgl_ray_3d<T> const& r,
00238 vgl_point_3d<T> const& p){
00239 return vgl_closest_point(p,r);}
00240
00241
00242
00243
00244
00245
00246 template <class T>
00247 double vgl_closest_point_t(vgl_line_3d_2_points<T> const& l,
00248 vgl_point_3d<T> const& p);
00249
00250 template <class T> inline
00251 double vgl_closest_point_t(vgl_point_3d<T> const& p,
00252 vgl_line_3d_2_points<T> const& l)
00253 { return vgl_closest_point_t(l,p); }
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263 template <class T>
00264 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00265 vgl_closest_points(const vgl_line_3d_2_points<T>& l1,
00266 const vgl_line_3d_2_points<T>& l2,
00267 bool* unique=0);
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277 template <class T>
00278 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00279 vgl_closest_points(const vgl_infinite_line_3d<T>& l1,
00280 const vgl_infinite_line_3d<T>& l2,
00281 bool* unique=0)
00282 {
00283 vgl_line_3d_2_points<T> l21(l1.point(), l1.point_t(T(1)));
00284 vgl_line_3d_2_points<T> l22(l2.point(), l2.point_t(T(1)));
00285 return vgl_closest_points(l21, l22, unique);
00286 }
00287
00288
00289
00290
00291
00292
00293
00294
00295 template <class T>
00296 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00297 vgl_closest_points(const vgl_line_segment_3d<T>& l1,
00298 const vgl_line_segment_3d<T>& l2,
00299 bool* unique=0);
00300
00301
00302
00303
00304
00305 template <class T>
00306 vgl_point_2d<T> vgl_closest_point(vgl_line_segment_2d<T> const& l,
00307 vgl_point_2d<T> const& p);
00308 template <class T> inline
00309 vgl_point_2d<T> vgl_closest_point(vgl_point_2d<T> const& p,
00310 vgl_line_segment_2d<T> const& l) { return vgl_closest_point(l,p); }
00311
00312
00313
00314
00315
00316 template <class T>
00317 vgl_point_3d<T> vgl_closest_point(vgl_line_segment_3d<T> const& l,
00318 vgl_point_3d<T> const& p);
00319 template <class T> inline
00320 vgl_point_3d<T> vgl_closest_point(vgl_point_3d<T> const& p,
00321 vgl_line_segment_3d<T> const& l) { return vgl_closest_point(l,p); }
00322
00323
00324 #endif // vgl_closest_point_h_