homog2d library
Macros | Enumerations | Functions
precision_test.cpp File Reference
#include "homog2d.hpp"
#include <random>
Include dependency graph for precision_test.cpp:

Macros

#define NUMTYPE   double
 

Enumerations

enum  Order {
  Order::RST, Order::RTS, Order::TSR, Order::TRS,
  Order::STR, Order::SRT, Order::Dummy, Order::RST,
  Order::RTS, Order::TSR, Order::TRS, Order::STR,
  Order::SRT, Order::Dummy
}
 Order of transformations. More...
 

Functions

const char * getString (Order order)
 
int main (int argc, const char **argv)
 

Macro Definition Documentation

◆ NUMTYPE

#define NUMTYPE   double

Enumeration Type Documentation

◆ Order

enum Order
strong

Order of transformations.

Enumerator
RST 
RTS 
TSR 
TRS 
STR 
SRT 
Dummy 
RST 
RTS 
TSR 
TRS 
STR 
SRT 
Dummy 

Function Documentation

◆ getString()

const char* getString ( Order  order)
48 {
49  switch (order )
50  {
51  case Order::RST: return "RST";
52  case Order::RTS: return "RTS";
53  case Order::TSR: return "TSR";
54  case Order::TRS: return "TRS";
55  case Order::STR: return "STR";
56  case Order::SRT: return "SRT";
57  default: assert(0);
58  }
59 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
const char **  argv 
)
103 {
104  RandomData rd;
105 
106  int nbTransfo = 5;
107  int nbPts = 20;
108 
109 /* for( int i=0; i<30; i++ )
110  std::cout << rd.getRandom() << "\n";
111  return 0;*/
112 
113  for( int i=0; i<nbTransfo; i++ )
114  {
115  auto angle = rd.getRandomAngle();
116  auto tx = rd.getRandomTranslation();
117  auto ty = rd.getRandomTranslation();
118  auto sx = rd.getRandomScale();
119  auto sy = rd.getRandomScale();
120  std::cout << std::scientific << i << ": angle=" << angle
121  << " tx=" << tx << " ty=" << ty
122  << " sx=" << sx << " sy=" << sy
123  << '\n';
124 
125  for( int order=0; order<6; order++ )
126  {
127  Hmatrix_<type::IsHomogr,NUMTYPE> H;
128 
129  auto str = getString( static_cast<Order>(order) );
130  std::cout << "order = " << str << '\n';
131  for( int c=0; c<3; c++ )
132  switch( str[c] )
133  {
134  case 'R': H.addRotation( angle*M_PI/180. ); break;
135  case 'T': H.addTranslation( tx, ty );
136  case 'S': H.addScale( sx, sy );
137  }
138 // std::cout << H << '\n';
139  Hmatrix_<type::IsHomogr,NUMTYPE> HMT = H;
140  HMT.inverse().transpose();
141  double dmin = 999.;
142  double dmax = 0.;
143  for( int j=0; j<nbPts; j++ )
144  {
145  auto pt1 = rd.getRandomPt();
146  auto pt2 = rd.getRandomPt();
147  auto lA = pt1 * pt2;
148  auto pt = H * pt1; // project point with H
149  auto lB = HMT * lA; // project line with H^-T
150  auto d = pt.distTo( lB );
151  auto dlog = d;
152 // if( d != 0. )
153 // dlog = std::log10(d);
154 #if 0
155  std::cout << j
156 // << std::fixed
157  << std::scientific
158  << std::setprecision(2)
159  << ": pt1=" << pt1
160  << ", pt2=" << pt2
161  << " dist pts=" << pt1.distTo(pt2)
162  << "=> dH=" << dlog
163  << " ratio=" << pt1.distTo(pt2) / dlog
164  << '\n';
165 #endif
166  if( d != 0. )
167  {
168  dmax = std::max( d, dmax );
169  dmin = std::min( d, dmin );
170  }
171 
172  }
173  std::cout << "dist: min=" << dmin << " max=" << dmax << '\n';
174  }
175  }
176 }
#define M_PI
Definition: homog2d.hpp:235
const char * getString(Order order)
Definition: precision_test.cpp:47
HOMOG2D_INUMTYPE angle(const Ellipse_< FPT > &ell)
Return angle of ellipse (free function)
Definition: homog2d.hpp:10993
Point2d pt
Definition: homog2d_test.cpp:4034
Here is the call graph for this function: