contrib/gel/mrc/vpgl/vpgl_affine_camera.txx
Go to the documentation of this file.
00001 // This is gel/mrc/vpgl/vpgl_affine_camera.txx
00002 #ifndef vpgl_affine_camera_txx_
00003 #define vpgl_affine_camera_txx_
00004 //:
00005 // \file
00006 
00007 #include "vpgl_affine_camera.h"
00008 #include <vnl/vnl_vector_fixed.h>
00009 #include <vcl_cassert.h>
00010 
00011 //-------------------------------------------
00012 template <class T>
00013 vpgl_affine_camera<T>::vpgl_affine_camera()
00014 {
00015   vnl_matrix_fixed<T,3,4> C( (T)0 );
00016   C(0,0) = C(1,1) = C(2,3) = (T)1;
00017   set_matrix( C );
00018 }
00019 
00020 
00021 //-------------------------------------------
00022 template <class T>
00023 vpgl_affine_camera<T>::vpgl_affine_camera( const vnl_vector_fixed<T,4>& row1,
00024                                            const vnl_vector_fixed<T,4>& row2 )
00025 {
00026   set_rows( row1, row2 );
00027 }
00028 
00029 
00030 //------------------------------------------
00031 template <class T>
00032 vpgl_affine_camera<T>::vpgl_affine_camera( const vnl_matrix_fixed<T,3,4>& camera_matrix )
00033 {
00034   assert( camera_matrix(2,3) != 0 );
00035   vnl_matrix_fixed<T,3,4> C( camera_matrix );
00036   C = C/C(2,3);
00037   C(2,0) = (T)0; C(2,1) = (T)0; C(2,2) = (T)0;
00038   set_matrix( C );
00039 }
00040 
00041 
00042 //------------------------------------------
00043 template <class T>
00044 void vpgl_affine_camera<T>::set_rows(
00045   const vnl_vector_fixed<T,4>& row1,
00046   const vnl_vector_fixed<T,4>& row2 )
00047  {
00048   vnl_matrix_fixed<T,3,4> C( (T)0 );
00049   for ( unsigned int i = 0; i < 4; i++ ) {
00050     C(0,i) = row1(i);
00051     C(1,i) = row2(i);
00052   }
00053   C(2,3) = (T)1;
00054   set_matrix( C );
00055  }
00056 
00057 // Code for easy instantiation.
00058 #undef vpgl_AFFINE_CAMERA_INSTANTIATE
00059 #define vpgl_AFFINE_CAMERA_INSTANTIATE(T) \
00060 template class vpgl_affine_camera<T >
00061 
00062 
00063 #endif // vpgl_affine_camera_txx_