DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
testSphericalAccumulator.cpp
1 
30 
31 #include <iostream>
32 #include "DGtal/base/Common.h"
33 #include "DGtal/helpers/StdDefs.h"
34 #include "DGtal/geometry/tools/SphericalAccumulator.h"
36 
37 using namespace std;
38 using namespace DGtal;
39 
41 // Functions for testing class SphericalAccumulator.
43 
44 bool testSphericalAccumulator()
45 {
46  unsigned int nbok = 0;
47  unsigned int nb = 0;
48 
49  trace.beginBlock ( "Testing Spherical Accumulator ..." );
50 
51  typedef Z3i::RealVector Vector;
52 
53  SphericalAccumulator<Vector> accumulator(10);
54  trace.info()<< accumulator << std::endl;
55 
56  //testing insert
57  accumulator.addDirection( Vector(1,1,1));
58  accumulator.addDirection( Vector(1.1,1.1,1.1));
59  nbok += (accumulator.samples() == 2) ? 1 : 0;
60  nb++;
61  trace.info() << "(" << nbok << "/" << nb << ") "
62  << "insert dirs" << std::endl;
63  trace.info()<< accumulator << std::endl;
64 
65  //testing clear
66  accumulator.clear();
67  trace.info()<< accumulator << std::endl;
68  nbok += (accumulator.samples() == 0) ? 1 : 0;
69  nb++;
70  trace.info() << "(" << nbok << "/" << nb << ") "
71  << "clear" << std::endl;
72 
73  //testing bin
74  accumulator.addDirection( Vector(1,1,1));
75  accumulator.addDirection( Vector(1.1,1.1,1.1));
76  trace.info()<< accumulator << std::endl;
79  Size i,j;
80  accumulator.binCoordinates( Vector(1,1,1).getNormalized(), i,j);
81  trace.info() << "Got coordinates ("<<i<<","<<j<<")"<<std::endl;
82  trace.info() << "Count(i,j) = "<< accumulator.count(i,j) <<std::endl;
83  nbok += (accumulator.count(i,j) == 2) ? 1 : 0;
84  nb++;
85  trace.info() << "(" << nbok << "/" << nb << ") "
86  << "bin with 2dirs" << std::endl;
87  trace.info()<< accumulator << std::endl;
88 
89  trace.info() << "Representative(i,j) = "<< accumulator.representativeDirection(i,j) <<std::endl;
90 
91  //testing ConstIterator
92  trace.info() << "Bin values: ";
94  for(SphericalAccumulator<Vector>::ConstIterator it=accumulator.begin(), itend=accumulator.end();
95  it != itend;
96  ++it)
97  {
98  trace.info() << *it<<" ";
99  if ( (*it) == 2)
100  itwith2=it;
101  }
102  trace.info() << std::endl;
103  trace.info() << "Representative(it) = "<< accumulator.representativeDirection(itwith2) <<std::endl;
104  nbok += (accumulator.representativeDirection(i,j) == accumulator.representativeDirection(itwith2)) ? 1 : 0;
105  nb++;
106  trace.info() << "(" << nbok << "/" << nb << ") "
107  << "representative directions identical" << std::endl;
108 
109  Size ii,jj;
110  accumulator.binCoordinates(itwith2, ii,jj);
111  trace.info() << "Coordinate from (it) = ("<<ii<<","<<jj<<")"<<std::endl;
112  nbok += (( i == ii) && (j==jj)) ? 1 : 0;
113  nb++;
114  trace.info() << "(" << nbok << "/" << nb << ") "
115  << "coordinates ok" << std::endl;
116 
117  trace.endBlock();
118 
119  return nbok == nb;
120 }
121 
122 bool testSphericalMore()
123 {
124  unsigned int nbok = 0;
125  unsigned int nb = 0;
126 
127  trace.beginBlock ( "Testing Spherical Accumulator with more points ..." );
128 
130  typedef Z3i::RealVector Vector;
131  SphericalAccumulator<Vector> accumulator(6);
133 
134 
135  trace.info()<< accumulator << std::endl;
137  //Insert some directions
138  accumulator.addDirection( Vector(0,1,0));
139  accumulator.addDirection( Vector(1,-0.01,0));
140  accumulator.addDirection( Vector(1,0.01,-0.01));
141  accumulator.addDirection( Vector(1,-0.01,0.01));
143 
144  accumulator.addDirection( Vector(1,0.01,0.01));
145  accumulator.addDirection( Vector(1,-.01,-0.01));
146 
147  trace.info() << "Bin values: ";
148  for(SphericalAccumulator<Vector>::ConstIterator it=accumulator.begin(), itend=accumulator.end();
149  it != itend;
150  ++it)
151  trace.info() << *it<<" ";
152  trace.info() << std::endl;
153  trace.info() << accumulator<<std::endl;
154 
155 
156  trace.endBlock();
157 
158  return nbok == nb;
159 }
160 
161 bool testSphericalMoreIntegerDir()
162 {
163  unsigned int nbok = 0;
164  unsigned int nb = 0;
165 
166  trace.beginBlock ( "Testing Spherical Accumulator with more Integer points ..." );
167 
168  typedef Z3i::Vector Vector;
169  SphericalAccumulator<Vector> accumulator(5);
170 
171 
172  trace.info()<< accumulator << std::endl;
173  //Insert some directions
174  accumulator.addDirection( Vector(0,1,0));
175  accumulator.addDirection( Vector(100,-1,0));
176  accumulator.addDirection( Vector(100,1,-1));
177  accumulator.addDirection( Vector(100,-1,1));
178  accumulator.addDirection( Vector(1,1,1));
179 
180  trace.info() << "Bin values: ";
181  for(SphericalAccumulator<Vector>::ConstIterator it=accumulator.begin(), itend=accumulator.end();
182  it != itend;
183  ++it)
184  trace.info() << *it<<" ";
185  trace.info() << std::endl;
186  trace.info() << accumulator<<std::endl;
187 
189  Size i,j;
190  accumulator.maxCountBin(i,j);
191  trace.info() << "Max bin= ("<<i<<","<<j<<")"<<std::endl;
192  trace.info() << "Max representative= "<<accumulator.representativeDirection(i,j)<<std::endl;
193  nbok += ( accumulator.representativeDirection(i,j) == Vector(300,-1,0 )) ? 1 : 0;
194  nb++;
195  trace.info() << "(" << nbok << "/" << nb << ") "
196  << "Representative ok" << std::endl;
197 
198  trace.endBlock();
199 
200  return nbok == nb;
201 }
202 
204 // Standard services - public :
205 
206 int main( int argc, char** argv )
207 {
208  trace.beginBlock ( "Testing class SphericalAccumulator" );
209  trace.info() << "Args:";
210  for ( int i = 0; i < argc; ++i )
211  trace.info() << " " << argv[ i ];
212  trace.info() << endl;
213 
214  bool res = testSphericalAccumulator() && testSphericalMore()
215  && testSphericalMoreIntegerDir();
216  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
217  trace.endBlock();
218  return res ? 0 : 1;
219 }
220 // //