Go to the documentation of this file.00001
00002 #ifndef vgl_h_matrix_1d_h_
00003 #define vgl_h_matrix_1d_h_
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <vnl/vnl_matrix_fixed.h>
00029 #include <vgl/vgl_homg_point_1d.h>
00030 #include <vcl_vector.h>
00031 #include <vcl_iosfwd.h>
00032
00033
00034
00035
00036 template <class T>
00037 class vgl_h_matrix_1d
00038 {
00039
00040 protected:
00041 vnl_matrix_fixed<T,2,2> t12_matrix_;
00042
00043 public:
00044
00045
00046
00047 vgl_h_matrix_1d() {}
00048 ~vgl_h_matrix_1d() {}
00049
00050
00051 vgl_h_matrix_1d(vgl_h_matrix_1d<T> const& M) : t12_matrix_(M.get_matrix()) {}
00052
00053
00054 vgl_h_matrix_1d(vnl_matrix_fixed<T,2,2> const& M) : t12_matrix_(M) {}
00055
00056
00057 explicit vgl_h_matrix_1d(T const* M) : t12_matrix_(M) {}
00058
00059 explicit vgl_h_matrix_1d(vcl_istream& s);
00060
00061 explicit vgl_h_matrix_1d(char const* filename);
00062
00063 vgl_h_matrix_1d(vcl_vector<vgl_homg_point_1d<T> > const& points1,
00064 vcl_vector<vgl_homg_point_1d<T> > const& points2);
00065
00066
00067
00068
00069 vgl_homg_point_1d<T> operator()(vgl_homg_point_1d<T> const& p) const;
00070
00071 vgl_homg_point_1d<T> operator*(vgl_homg_point_1d<T> const& p) const { return (*this)(p); }
00072 vgl_homg_point_1d<T> correlation(vgl_homg_point_1d<T> const& p) const { return (*this)(p); }
00073
00074
00075 vgl_homg_point_1d<T> preimage(vgl_homg_point_1d<T> const& q) const;
00076
00077 bool operator==(vgl_h_matrix_1d<T> const& M) const { return t12_matrix_ == M.get_matrix(); }
00078
00079
00080 vgl_h_matrix_1d<T> operator*(vgl_h_matrix_1d<T> const& H) const
00081 { return vgl_h_matrix_1d<T>(t12_matrix_ * H.t12_matrix_); }
00082
00083
00084
00085
00086 vnl_matrix_fixed<T,2,2> const& get_matrix() const { return t12_matrix_; }
00087
00088 void get (vnl_matrix_fixed<T,2,2>* M) const;
00089
00090
00091 void get (vnl_matrix<T>* M) const;
00092
00093 void get (T* M) const;
00094
00095 T get (unsigned int row_index, unsigned int col_index) const;
00096
00097 vgl_h_matrix_1d get_inverse() const;
00098
00099 bool is_rotation() const;
00100 bool is_euclidean() const;
00101 bool is_identity() const;
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 bool projective_basis(vcl_vector<vgl_homg_point_1d<T> > const& three_points);
00114
00115
00116 vgl_h_matrix_1d& set_identity();
00117
00118 vgl_h_matrix_1d& set(T const* M);
00119
00120 vgl_h_matrix_1d& set(vnl_matrix_fixed<T,2,2> const& M);
00121
00122
00123 vgl_h_matrix_1d& set (unsigned int row_index, unsigned int col_index, T value)
00124 { t12_matrix_[row_index][col_index]=value; return *this; }
00125
00126
00127
00128
00129
00130
00131 vgl_h_matrix_1d& set_scale(T scale);
00132
00133
00134 vgl_h_matrix_1d& set_translation(T tx);
00135
00136
00137
00138
00139
00140
00141 vgl_h_matrix_1d& set_affine(vnl_matrix_fixed<T,1,2> const& M12);
00142
00143
00144 bool read(char const* filename);
00145
00146 bool read(vcl_istream& s);
00147 };
00148
00149
00150 template <class T> vcl_ostream& operator<<(vcl_ostream& s, vgl_h_matrix_1d<T> const& H);
00151
00152 template <class T> vcl_istream& operator>>(vcl_istream& s, vgl_h_matrix_1d<T>& H)
00153 { H.read(s); return s; }
00154
00155
00156 #define VGL_H_MATRIX_1D_INSTANTIATE(T) extern "please include vgl/algo/vgl_h_matrix_1d.txx first"
00157
00158 #endif // vgl_h_matrix_1d_h_