36 #include "DGtal/base/Common.h"
37 #include "DGtal/base/CUnaryFunctor.h"
38 #include "DGtal/kernel/PointVector.h"
39 #include "DGtal/kernel/SpaceND.h"
40 #include "DGtal/kernel/BasicPointFunctors.h"
41 #include "DGtal/kernel/domains/HyperRectDomain.h"
43 using namespace DGtal;
46 template <
typename TFunctor,
typename TArg,
typename TRes >
47 void checkingConcepts()
54 unsigned int nbok = 0;
64 std::vector<Dimension> v1, v2;
65 v1.push_back(0); v1.push_back(2);
66 v2.push_back(2); v2.push_back(1);
67 Projector2D proj1, proj2, proj3;
68 proj1.init(v1.begin(), v1.end());
69 proj2.init(v2.begin(), v2.end());
73 trace.
info() <<
"p " << p <<
" => " << proj1(p) <<
" == " << res1 << std::endl;
74 nbok += ( proj1(p) == res1 ) ? 1 : 0;
78 trace.
info() <<
"p " << p <<
" => " << proj2(p) <<
" == " << res2 << std::endl;
79 nbok += ( proj2(p) == res2 ) ? 1 : 0;
83 trace.
info() <<
"p " << p <<
" => " << proj3(p) <<
" == " << res3 << std::endl;
84 nbok += ( proj3(p) == res3 ) ? 1 : 0;
96 std::vector<Dimension> v1, v2, v4;
97 v1.push_back(0); v1.push_back(2); v1.push_back(1);
98 v2.push_back(1); v2.push_back(0);
100 Projector3D proj1, proj2, proj3;
101 proj1.init(v1.begin(), v1.end());
102 proj2.init(v2.begin(), v2.end());
103 Projector3D proj4(-1);
104 proj4.init(v4.begin(), v4.end());
117 trace.
info() <<
"pt " << pt <<
" => " << sliceRot(pt) <<
" == " << ptR << std::endl;
118 nbok += ( sliceRot(pt) == ptR ) ? 1 : 0;
121 trace.
info() <<
"pt " << pt_2 <<
" => " << sliceRot2(pt_2) <<
" == " << ptR2 << std::endl;
122 nbok += ( sliceRot2(pt_2) == ptR2 ) ? 1 : 0;
135 nbok += ( embedder(ptb) == PointVector<3,int>(3,3,3) ) ? 1 : 0;
138 trace.
info() <<
"pt " << pt_2b <<
" => " << embedder(pt_2b) <<
" == " << PointVector<3,int>(5,5,5) << std::endl;
139 nbok += ( embedder(pt_2b) == PointVector<3,int>(5,5,5) ) ? 1 : 0;
143 PointVector<3,int> pt2Origin3D(5,5,3);
146 PointVector<3,int>(0,0,3),
150 trace.
info() <<
"pt " << pt2b <<
" => " << embedder2(pt2b) <<
" == " << PointVector<3,int>(3,5,3) << std::endl;
151 nbok += ( embedder2(pt2b) == PointVector<3,int>(3,5,3) ) ? 1 : 0;
154 trace.
info() <<
"pt " << pt2_2b <<
" => " << embedder2(pt2_2b) <<
" == " << PointVector<3,int>(5,4,3) << std::endl;
155 nbok += ( embedder2(pt2_2b) == PointVector<3,int>(5,4,3) ) ? 1 : 0;
160 PointVector<3,int> res1(5,0,2);
161 trace.
info() <<
"p " << p <<
" => " << proj1(p) <<
" == " << res1 << std::endl;
162 nbok += ( proj1(p) == res1 ) ? 1 : 0;
165 PointVector<3,int> res2(2,5,0);
166 trace.
info() <<
"p " << p <<
" => " << proj2(p) <<
" == " << res2 << std::endl;
167 nbok += ( proj2(p) == res2 ) ? 1 : 0;
170 PointVector<3,int> res3(5,2,0);
171 trace.
info() <<
"p " << p <<
" => " << proj3(p) <<
" == " << res3 << std::endl;
172 nbok += ( proj3(p) == res3 ) ? 1 : 0;
175 PointVector<3,int> res4(2,-1,-1);
176 trace.
info() <<
"p " << p <<
" => " << proj4(p) <<
" == " << res4
177 <<
"(-1 as default value)" << std::endl;
178 nbok += ( proj4(p) == res4 ) ? 1 : 0;
188 std::vector< SpaceND<2, int>::Size > aGridSize;
189 aGridSize.push_back(5);
190 aGridSize.push_back(5);
193 aGridSize, shiftVector);
194 trace.
info()<<
"Subsampling functor on 2D domain " << domainSource <<
" with grid size "
195 << aGridSize[0] <<
" " << aGridSize[1] <<
" and shift vector "<< shiftVector <<std::endl ;
198 trace.
info() <<
"Sampling point of coordinate "<< pointTest <<
", => coordinates in source domain:"
201 nbok += (pointInSourceDomain== PointVector<2,int>(5,0));
205 std::vector< SpaceND<3, int>::Size > aGridSize3D;
206 aGridSize3D.push_back(5);
207 aGridSize3D.push_back(3);
208 aGridSize3D.push_back(1);
209 PointVector<3,int> shiftVector3D(0 ,1, -1);
211 aGridSize3D, shiftVector3D);
212 trace.
info()<<
"Subsampling functor on 3D domain " << domainSource3D <<
" with grid size "
213 << aGridSize3D[0] <<
" " << aGridSize3D[1]<<
" " << aGridSize3D[2] <<
" and shift vector "<< shiftVector3D <<std::endl ;
214 PointVector<3,int> pointTest3D(0,1,2);
215 PointVector<3,int> pointTest3D2(0,0,0);
216 PointVector<3,int> pointInSourceDomain3D = subSampler3D(pointTest3D);
217 PointVector<3,int> pointInSourceDomain3D2 = subSampler3D(pointTest3D2);
218 trace.
info() <<
"Sampling point of coordinate "<< pointTest3D <<
", => coordinates in source domain:"
219 << pointInSourceDomain3D <<
" == " << PointVector<3,int>(0, 4, 1) << std::endl;
220 trace.
info() <<
"Sampling point of coordinate "<< pointTest3D2 <<
", => coordinates in source domain:"
221 << pointInSourceDomain3D2 <<
" == " << PointVector<3,int>(0, 1, 0) << std::endl;
223 nbok += (pointInSourceDomain3D== PointVector<3,int>(0, 4, 1)) &&
224 (pointInSourceDomain3D2== PointVector<3,int>(0, 1, 0));
227 std::vector<unsigned int> vectFlip;
228 vectFlip.push_back(1);
229 vectFlip.push_back(2);
231 trace.
info() <<
"Flip point of coordinate "<< pointTest3D <<
", => fliped coordinates with axis 1 and 2:"
232 << flipFunctorAxis12(pointTest3D) <<
" == " << PointVector<3,int>(0, 9, 8) << std::endl;
234 nbok += (flipFunctorAxis12(pointTest3D)== PointVector<3,int>(0, 9, 8));
239 std::vector< double > aGridSizeReSample;
240 aGridSizeReSample.push_back(0.25);
241 aGridSizeReSample.push_back(0.5);
244 aGridSizeReSample, shiftVector);
246 trace.
info()<<
"Resampling functor on 2D domain " << domainSource <<
" with grid size "
247 << aGridSizeReSample[0] <<
" " << aGridSizeReSample[1] <<
" and shift vector "<< shiftVector <<std::endl ;
248 PointVector<2,int> pointTestRS(9,4);
249 PointVector<2,int> pointInSourceDomainRS = reSampler(pointTestRS);
250 trace.
info() <<
"Sampling point of coordinate "<< pointTestRS <<
", => coordinates in source domain:"
251 << pointInSourceDomainRS <<
" == " << PointVector<2,int>(2,2) << std::endl;
253 nbok += (pointInSourceDomainRS== PointVector<2,int>(2,2));
264 int main(
int argc,
char** argv )
268 for (
int i = 0; i < argc; ++i )
273 checkingConcepts<functors::Projector<SpaceND<2,int> >,
PointVector<6,int>, PointVector<2,int> >();
278 bool res = testProjector();
280 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;
void beginBlock(const std::string &keyword="")
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
Aim: Functor that maps a point P of dimension i to a point Q of dimension j. The member myDims is an ...
Aim: Functor that subsamples an initial domain by given a grid size and a shift vector. By this way, for a given point considered in a new domain, it allows to recover the point coordinates in the source domain. Such functor can be usefull to apply basic image subsampling in any dimensions by using ImageAdapter class.
Aim: Implements basic operations that will be used in Point and Vector classes.
Aim: Defines a unary functor, which associates arguments to results.
Aim: Functor that embeds a 2D point into a 3D space from two axis vectors and an origin point given i...
Aim: Functor that flips the domain coordinate system from some selected axis. For instance...
DGtal is the top-level namespace which contains all DGtal functions and types.
boost::int32_t int32_t
signed 32-bit integer.
Special Point Functor that adds one dimension to a 2D point and apply on it a rotation of angle alpha...