algebraic lens distortion
|
00001 #ifndef AMI_DLL_H 00002 #define AMI_DLL_H 00003 #endif 00004 00010 #ifndef POINT2D_H 00011 #define POINT2D_H 00012 #include <iostream> 00013 #include <math.h> 00014 #include <vector> 00015 00016 using namespace std; 00017 00018 namespace ami 00019 { 00020 00026 template < class T > 00027 class AMI_DLL_H point2d { 00028 00029 public : 00030 T x ; 00031 T y ; 00032 point2d():x( (T) 0), y( (T) 0) {}; 00033 ~point2d() {}; 00034 point2d(const T xx , const T yy) { 00035 x=xx; 00036 y=yy; 00037 } 00038 point2d(const T scalar) { 00039 x=y=scalar; 00040 } 00041 point2d & operator=(const point2d &p) { 00042 x=p.x; 00043 y=p.y; 00044 return *this; 00045 } 00046 point2d & operator=(const T scalar) { 00047 x=scalar; 00048 y=scalar; 00049 return *this; 00050 } 00051 point2d (const point2d<T> &p) { 00052 x=p.x; 00053 y=p.y; 00054 } 00055 point2d operator+(const point2d &p)const { 00056 return point2d(x+p.x,y+p.y); 00057 } 00058 point2d operator-(const point2d &p)const { 00059 return point2d(x-p.x,y-p.y); 00060 } 00061 point2d operator*(const T &a)const { 00062 return point2d(a*x,a*y); 00063 } 00064 double operator*(const point2d &p)const { 00065 return ( (double) x*p.x+y*p.y); 00066 } 00067 inline T norm() { 00068 T paso=x*x+y*y; 00069 return(paso>0.?sqrtf((float) paso):0.); 00070 } 00071 inline T norm2() { 00072 return(x*x+y*y); 00073 } 00074 void print() { 00075 std::cout << "point2d : (" << x << "," << y << ")" << std::endl; 00076 } 00077 int find_nearest_point(std::vector< point2d <T> > primitive); 00078 void find_nearest_point(std::vector< point2d <T> > primitive,int &id, T &distance); 00079 bool operator!=(const T scalar) const { 00080 return(x!=scalar && y!=scalar); 00081 } 00082 }; 00083 00085 00091 template <class T> 00092 int point2d<T>::find_nearest_point(std::vector< point2d <T> > primitive) 00093 { 00094 //FIND THE NEAREST POINT TO THE ACTUAL POINT 00095 T min_dist,dist; 00096 int min=-1; 00097 min_dist=99999; 00098 point2d<T> point_p; 00099 for(unsigned int i=0; i<primitive.size(); i++) 00100 { 00101 point_p.x=primitive[i].x; 00102 point_p.y=primitive[i].y; 00103 dist = ((*this)-point_p).norm2(); //DISTANCE 00104 if(dist < min_dist) 00105 { 00106 min_dist=dist; 00107 min=i; 00108 } 00109 } 00110 return min; 00111 } 00112 00113 00120 template <class T> 00121 void point2d<T>::find_nearest_point(std::vector< point2d <T> > primitive,int &id, T &distance) 00122 { 00123 //FIND THE NEAREST POINT TO THE ACTUAL POINT 00124 T dist; 00125 id=-1; 00126 distance=99999; 00127 point2d<T> point_p; 00128 for(unsigned int i=0; i<primitive.size(); i++) 00129 { 00130 point_p.x=primitive[i].x; 00131 point_p.y=primitive[i].y; 00132 dist = ((*this)-point_p).norm2(); //DISTANCE 00133 if(dist < distance) 00134 { 00135 distance=dist; 00136 id=i; 00137 } 00138 } 00139 } 00140 00141 } 00142 #endif