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
00233
00234
00235
00236
00237
00238 template <class T>
00239 double vgl_closest_point_t(vgl_line_3d_2_points<T> const& l,
00240 vgl_point_3d<T> const& p);
00241
00242 template <class T> inline
00243 double vgl_closest_point_t(vgl_point_3d<T> const& p,
00244 vgl_line_3d_2_points<T> const& l)
00245 { return vgl_closest_point_t(l,p); }
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 template <class T>
00256 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00257 vgl_closest_points(const vgl_line_3d_2_points<T>& l1,
00258 const vgl_line_3d_2_points<T>& l2,
00259 bool* unique=0);
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 template <class T>
00270 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00271 vgl_closest_points(const vgl_infinite_line_3d<T>& l1,
00272 const vgl_infinite_line_3d<T>& l2,
00273 bool* unique=0)
00274 {
00275 vgl_line_3d_2_points<T> l21(l1.point(), l1.point_t(T(1)));
00276 vgl_line_3d_2_points<T> l22(l2.point(), l2.point_t(T(1)));
00277 return vgl_closest_points(l21, l22, unique);
00278 }
00279
00280
00281
00282
00283
00284
00285
00286
00287 template <class T>
00288 vcl_pair<vgl_point_3d<T>, vgl_point_3d<T> >
00289 vgl_closest_points(const vgl_line_segment_3d<T>& l1,
00290 const vgl_line_segment_3d<T>& l2,
00291 bool* unique=0);
00292
00293
00294 #endif // vgl_closest_point_h_