contrib/gel/mrc/vpgl/algo/vpgl_project.cxx
Go to the documentation of this file.
00001 #include "vpgl_project.h"
00002 //:
00003 // \file
00004 
00005 #include <vgl/vgl_point_2d.h>
00006 #include <vgl/vgl_homg_point_2d.h>
00007 #include <vgl/vgl_homg_point_3d.h>
00008 
00009 //: project a 3-d bounding box and derive the corresponding 2-d bounding box
00010 vgl_box_2d<double> vpgl_project::
00011 project_bounding_box(vpgl_perspective_camera<double>   cam,
00012                      vgl_box_3d<double> const & box)
00013 {
00014   vpgl_proj_camera<double> pcam = static_cast<vpgl_proj_camera<double> >(cam);
00015   return vpgl_project::project_bounding_box(pcam, box);
00016 }
00017 
00018 vgl_box_2d<double> vpgl_project::project_bounding_box(vpgl_proj_camera<double>  cam,
00019                                                       vgl_box_3d<double> const & box)
00020 {
00021   //compute the vertices of the box
00022   double min_x = box.min_x(), max_x = box.max_x();
00023   double min_y = box.min_y(), max_y = box.max_y();
00024   double min_z = box.min_z(), max_z = box.max_z();
00025   vgl_homg_point_3d<double > p[8];
00026   p[0].set(min_x, min_y, min_z);  p[1].set(max_x, min_y, min_z);
00027   p[2].set(min_x, max_y, min_z);  p[3].set(max_x, max_y, min_z);
00028   p[4].set(min_x, min_y, max_z);  p[5].set(max_x, min_y, max_z);
00029   p[6].set(min_x, max_y, max_z);  p[7].set(max_x, max_y, max_z);
00030 
00031   //project the vertices and form the 2-d bounds
00032   vgl_box_2d<double>  box_2d;
00033   for (unsigned i =0; i<8; ++i)
00034   {
00035     vgl_homg_point_2d<double> hp2d = cam.project(p[i]);
00036     box_2d.add(vgl_point_2d<double>(hp2d));
00037   }
00038   return box_2d;
00039 }