DGtal 1.3.0
Loading...
Searching...
No Matches
Functions
testChamferDT.cpp File Reference
#include <iostream>
#include <set>
#include <algorithm>
#include "DGtal/base/Common.h"
#include "ConfigTest.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/geometry/volumes/distance/ChamferNorm2D.h"
#include "DGtal/geometry/volumes/distance/CMetricSpace.h"
#include "DGtal/geometry/volumes/distance/CSeparableMetric.h"

Go to the source code of this file.

Functions

bool checkCMetricConcept ()
 
bool testChamferSimple ()
 
bool testBasicMasks ()
 
bool testIntersection ()
 
bool testShrink ()
 
bool testDoubleShrink ()
 
bool testDoubleShrinkHorizontal ()
 
bool testHiddenBy ()
 
bool testDoubleOnSegment ()
 
bool testSpecialCase ()
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
David Coeurjolly (david.nosp@m..coe.nosp@m.urjol.nosp@m.ly@l.nosp@m.iris..nosp@m.cnrs.nosp@m..fr ) Laboratoire d'InfoRmatique en Image et Systemes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
Date
2013/12/16

Functions for testing class ChamferDT.

This file is part of the DGtal library.

Definition in file testChamferDT.cpp.

Function Documentation

◆ checkCMetricConcept()

bool checkCMetricConcept ( )

Definition at line 51 of file testChamferDT.cpp.

52{
55 return true;
56}
Aim: implements a model of CSeparableMetric for Chamfer and path based norms.
Definition: ChamferNorm2D.h:87
Aim: defines the concept of metric spaces.
Definition: CMetricSpace.h:125
Aim: defines the concept of separable metrics.

Referenced by main().

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 954 of file testChamferDT.cpp.

955{
956 trace.beginBlock ( "Testing class ChamferDT" );
957 trace.info() << "Args:";
958 for ( int i = 0; i < argc; ++i )
959 trace.info() << " " << argv[ i ];
960 trace.info() << std::endl;
961
963 && testShrink()
966 && testHiddenBy()
968 && testSpecialCase(); // && ... other tests
969 trace.emphase() << ( res ? "Passed." : "Error." ) << std::endl;
970 trace.endBlock();
971 return res ? 0 : 1;
972}
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & info()
double endBlock()
Trace trace
Definition: Common.h:154
bool testDoubleOnSegment()
bool testDoubleShrinkHorizontal()
bool testDoubleShrink()
bool testIntersection()
bool testShrink()
bool testBasicMasks()
bool testHiddenBy()
bool testChamferSimple()
bool checkCMetricConcept()
bool testSpecialCase()

References DGtal::Trace::beginBlock(), checkCMetricConcept(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), testBasicMasks(), testChamferSimple(), testDoubleOnSegment(), testDoubleShrink(), testDoubleShrinkHorizontal(), testHiddenBy(), testIntersection(), testShrink(), testSpecialCase(), and DGtal::trace.

◆ testBasicMasks()

bool testBasicMasks ( )

Definition at line 179 of file testChamferDT.cpp.

180{
181 unsigned int nbok = 0;
182 unsigned int nb = 0;
183 trace.beginBlock ( "Testing basic chamfer masks...");
184
187
188 //3-4 mask
189 dirs34.push_back(Z2i::Vector(0,-1));
190 dirs34.push_back(Z2i::Vector(1,-1));
191 dirs34.push_back(Z2i::Vector(1,0));
192 dirs34.push_back(Z2i::Vector(1,1));
193 normals34.push_back(Z2i::Vector(1,-3));
194 normals34.push_back(Z2i::Vector(3,-1));
195 normals34.push_back(Z2i::Vector(3,1));
196 normals34.push_back(Z2i::Vector(1,3));
197
198 experimental::ChamferNorm2D<Space> mask34(dirs34,normals34);
199
200 Point orig(0,0);
201 Point p(3,0);
202 trace.info() <<"Distance "<<p<<" = "<< mask34(orig,p)<<std::endl;;
203 trace.info() <<"Cone "<< *(mask34.getCone(p))<< " "<< *(mask34.getCone(p)+1)<< std::endl;
204
205 Point q(3,1);
206 trace.info() <<"Distance "<<q<<" = "<< mask34(orig,q)<<std::endl;;
207 trace.info() <<"Cone "<< *(mask34.getCone(q))<< " "<< *(mask34.getCone(q)+1)<< std::endl;
208
209
210 trace.endBlock();
211 return nbok == nb;
212}
std::vector< Vector > Directions
Container for set of directions.

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::experimental::ChamferNorm2D< TSpace >::getCone(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testChamferSimple()

bool testChamferSimple ( )

Definition at line 59 of file testChamferDT.cpp.

60{
61 unsigned int nbok = 0;
62 unsigned int nb = 0;
63 trace.beginBlock ( "Testing simple chamfer mask localization...");
64
67
70
71 //3-4 mask
72 dirs34.push_back(Z2i::Vector(0,-1));
73 dirs34.push_back(Z2i::Vector(1,-1));
74 dirs34.push_back(Z2i::Vector(1,0));
75 dirs34.push_back(Z2i::Vector(1,1));
76 normals34.push_back(Z2i::Vector(1,-3));
77 normals34.push_back(Z2i::Vector(3,-1));
78 normals34.push_back(Z2i::Vector(3,1));
79 normals34.push_back(Z2i::Vector(1,3));
80
81 experimental::ChamferNorm2D<Space> aMask(dirs34,normals34);
82
83
84
85
86 //Testing cone discovery
87 Vector d(101,100);
88 trace.info() << "Direction "<<d<<std::endl;
89 trace.info() << " -> cone "<< *aMask.getCone(d)
90 << " -- " << *(aMask.getCone(d)+1) <<std::endl;
91 nbok += ( lthan(d, *(aMask.getCone(d)+1))) ? 1 : 0;
92 nb++;
93 trace.info() << "(" << nbok << "/" << nb << ") "
94 << "(d < cone+1) returns true" << std::endl;
95 nbok += (lqthan(*(aMask.getCone(d)),d)) ? 1 : 0;
96 nb++;
97 trace.info() << "(" << nbok << "/" << nb << ") "
98 << "(cone <= d) returns true" << std::endl;
99
100 //testing canonical
101 Vector d3(-101,100);
102 trace.info() << "Direction "<<d3<<std::endl;
103 trace.info() << " -> cone "<< *aMask.getCone(d3)
104 << " -- " << *(aMask.getCone(d3)+1) <<std::endl;
105 nbok += ( lthan(aMask.canonicalRay(d3), *(aMask.getCone(d3)+1))) ? 1 : 0;
106 nb++;
107 trace.info() << "(" << nbok << "/" << nb << ") "
108 << "(d < cone+1) returns true" << std::endl;
109 nbok += (lqthan(*(aMask.getCone(d3)),aMask.canonicalRay(d3))) ? 1 : 0;
110 nb++;
111 trace.info() << "(" << nbok << "/" << nb << ") "
112 << "(cone <= d) returns true" << std::endl;
113
114
115 //aligned
116 Vector d2(8,8);
117 trace.info() << "Direction "<<d2<<std::endl;
118 trace.info() << " -> cone "<< *aMask.getCone(d2)
119 << " -- " << *(aMask.getCone(d2)+1) <<std::endl;
120 if ((aMask.getCone(d2)+1) != aMask.end())
121 {
122 nbok += ( lthan(d2, *(aMask.getCone(d2)+1))) ? 1 : 0;
123 nb++;
124 trace.info() << "(" << nbok << "/" << nb << ") "
125 << "(d2 < cone+1) returns true" << std::endl;
126 }
127 nbok += (lqthan(*(aMask.getCone(d2)),d2) ) ? 1 : 0;
128 nb++;
129 trace.info() << "(" << nbok << "/" << nb << ") "
130 << "(cone <= d2) returns true" << std::endl;
131
132
133 //Distance test
134 Point p(1,1), q(102,101);
135 trace.info()<< "Distance between "<<p<<" and "<< q << " = "<< aMask(p,q)<<std::endl;
136 trace.info()<< "Distance between "<<q<<" and "<< p << " = "<< aMask(q,p)<<std::endl;
137 nbok += ( aMask(p,q) == aMask(q,p)) ? 1 : 0;
138 nb++;
139 trace.info() << "(" << nbok << "/" << nb << ") "
140 << "d(p,q)==d(q,p)" << std::endl;
141
142
143 //Testing Last cone:
144 Vector d4(1,10);
145 trace.info() << "Direction "<<d4<<std::endl;
146 trace.info() << " -> cone "<< *aMask.getCone(d4)
147 << " -- " << *(aMask.getCone(d4)+1) <<std::endl;
148 nbok += ( *aMask.getCone(d4) == Point(1,1)) ? 1 : 0;
149 nb++;
150 trace.info() << "(" << nbok << "/" << nb << ") "
151 << "Last cone 1" << std::endl;
152 trace.info() << " -> normal "<< aMask.getNormalFromCone(aMask.getCone(d4)) <<std::endl;;
153 nbok += (aMask.getNormalFromCone(aMask.getCone(d4)) == Point(1,3)) ? 1 : 0;
154 nb++;
155 trace.info() << "(" << nbok << "/" << nb << ") "
156 << "Last cone 2" << std::endl;
157
158 //Testing Last cone:
159 Vector d5(0,10);
160 trace.info() << "Direction "<<d5<<std::endl;
161 trace.info() << " -> cone "<< *aMask.getCone(d5)
162 << " -- " << *(aMask.getCone(d5)+1) <<std::endl;
163 nbok += ( *aMask.getCone(d5) == Point(1,1)) ? 1 : 0;
164 nb++;
165 trace.info() << "(" << nbok << "/" << nb << ") "
166 << "Last cone 1" << std::endl;
167 trace.info() << " -> normal "<< aMask.getNormalFromCone(aMask.getCone(d5)) <<std::endl;;
168 nbok += (aMask.getNormalFromCone(aMask.getCone(d5)) == Point(1,3)) ? 1 : 0;
169 nb++;
170 trace.info() << "(" << nbok << "/" << nb << ") "
171 << "Last cone 2" << std::endl;
172
173 trace.info() << " upper="<<*std::upper_bound(aMask.begin(), aMask.end(), d4, lthan)<<std::endl;
174
175 trace.endBlock();
176 return nbok == nb;
177}
Space::Point Point
Definition: StdDefs.h:95

References DGtal::experimental::ChamferNorm2D< TSpace >::begin(), DGtal::Trace::beginBlock(), DGtal::experimental::ChamferNorm2D< TSpace >::canonicalRay(), DGtal::experimental::ChamferNorm2D< TSpace >::end(), DGtal::Trace::endBlock(), DGtal::experimental::ChamferNorm2D< TSpace >::getCone(), DGtal::experimental::ChamferNorm2D< TSpace >::getNormalFromCone(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testDoubleOnSegment()

bool testDoubleOnSegment ( )

Definition at line 790 of file testChamferDT.cpp.

791{
792 unsigned int nbok = 0;
793 unsigned int nb = 0;
794
795 //5-7-11 metic
797 Metric::Directions dirs5711;
798 Metric::Directions normals5711;
799 //5-7-11 mask
800 dirs5711.push_back(Z2i::Vector(0,-1));
801 dirs5711.push_back(Z2i::Vector(1,-2));
802 dirs5711.push_back(Z2i::Vector(1,-1));
803 dirs5711.push_back(Z2i::Vector(2,-1));
804 dirs5711.push_back(Z2i::Vector(1,0));
805 dirs5711.push_back(Z2i::Vector(2,1));
806 dirs5711.push_back(Z2i::Vector(1,1));
807 dirs5711.push_back(Z2i::Vector(1,2));
808
809 normals5711.push_back(Z2i::Vector(1,-5));
810 normals5711.push_back(Z2i::Vector(3,-4));
811 normals5711.push_back(Z2i::Vector(4,-3));
812 normals5711.push_back(Z2i::Vector(5,-1));
813 normals5711.push_back(Z2i::Vector(5,1));
814 normals5711.push_back(Z2i::Vector(4,3));
815 normals5711.push_back(Z2i::Vector(3,4));
816 normals5711.push_back(Z2i::Vector(1,5));
817
818 Metric mask5711(dirs5711,normals5711);
819
820 trace.beginBlock ( "Testing when Q or P belongs to the segment...");
821 //Setting:
822 Point P(0,0);
823 Point Pb(0,-1);
824 Point Pup(0,10);
825 Point Q(10,5);
826 Point Lmin(10,-10);
827 Point Lmax(10,10);
828 Point midPointP,nextMidPointP;
829 Point midPointQ,nextMidPointQ;
830
831 Metric::ConstIterator itBeg = mask5711.begin();
832 Metric::ConstIterator itEnd = mask5711.end();
833
834 Metric::ConstIterator cone = mask5711.shrinkP(itBeg, itEnd, P, Q, Lmin, Lmax, 1, midPointP, nextMidPointP);
835 trace.info() <<" P - Shrink returns the cone "<< *cone<<" " <<*(cone+1)<<std::endl;
836 trace.info() <<" P - MidPoint "<< midPointP<<" " <<nextMidPointP<<std::endl<<std::endl;
837
838
839 Metric::ConstIterator cone2 = mask5711.shrinkP(itBeg, itEnd, Q, P, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
840 Metric::ConstIterator cone3 = mask5711.shrinkP(itBeg, itEnd, Q, Pup, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
841 trace.info() <<" Q - P Shrink returns the cone "<< *cone2<<" " <<*(cone2+1)<<std::endl;
842 trace.info() <<" Q - Pup Shrink returns the cone "<< *cone3<<" " <<*(cone3+1)<<std::endl;
843 trace.info() <<" Q - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl<<std::endl;
844 nbok += ( cone2 == itBeg ) ? 1 : 0;
845 nb++;
846 trace.info() << "(" << nbok << "/" << nb << ") "
847 << " P's cone returns itBegin" << std::endl;
848
849 trace.endBlock();
850
851 Point PP(10,5);
852 Point QQ(3,4);
853 Point QQup(3,8);
854
855 Metric::Abscissa pos = mask5711.getLowerVoronoiEdgeAbscissa(PP, QQ, Lmin, Lmax, 1);
856 trace.warning() <<" Abscissa of voro call (PP,QQ) = "<< pos <<std::endl;
857 nbok += ( pos < 5 ) ? 1 : 0;
858 nb++;
859 trace.info() << "(" << nbok << "/" << nb << ") "
860 << " PP-QQ cell is lesser than 5" << std::endl;
861
862
863 Metric::Abscissa pos2 = mask5711.getLowerVoronoiEdgeAbscissa(PP, QQup, Lmin, Lmax, 1);
864 trace.warning() <<" Abscissa of voro call (PP,QQup) = "<< pos2 <<std::endl;
865 nbok += ( pos2 > 5 ) ? 1 : 0;
866 nb++;
867 trace.info() << "(" << nbok << "/" << nb << ") "
868 << " PP-QQ cell is greater than 5" << std::endl;
869
870
871 Metric::ConstIterator conebis = mask5711.shrinkP(itBeg, itEnd, P, Pb, Lmin, Lmax, 1, midPointP, nextMidPointP);
872 Metric::Abscissa posbis = mask5711.getLowerVoronoiEdgeAbscissa(P, Pb, Lmin, Lmax, 1);
873 trace.info() <<" Pbis - Shrink returns the cone "<< *conebis<<" " <<*(conebis+1)<<std::endl;
874 trace.info() <<" Pbis - Shrink returns the cone "<< *conebis<<" " <<*(conebis+1)<<std::endl;
875 trace.info() <<" Pbis - Pos "<< posbis<<std::endl;
876
877
878 return nbok == nb;
879}
std::ostream & warning()

References DGtal::PointVector< dim, TEuclideanRing, TContainer >::begin(), DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), DGtal::trace, and DGtal::Trace::warning().

Referenced by main().

◆ testDoubleShrink()

bool testDoubleShrink ( )

Definition at line 419 of file testChamferDT.cpp.

420{
421 unsigned int nbok = 0;
422 unsigned int nb = 0;
423 trace.beginBlock ( "Testing Double Shrinking...");
424
425 //5-7-11 metic
427 Metric::Directions dirs5711;
428 Metric::Directions normals5711;
429 //5-7-11 mask
430 dirs5711.push_back(Z2i::Vector(0,-1));
431 dirs5711.push_back(Z2i::Vector(1,-2));
432 dirs5711.push_back(Z2i::Vector(1,-1));
433 dirs5711.push_back(Z2i::Vector(2,-1));
434 dirs5711.push_back(Z2i::Vector(1,0));
435 dirs5711.push_back(Z2i::Vector(2,1));
436 dirs5711.push_back(Z2i::Vector(1,1));
437 dirs5711.push_back(Z2i::Vector(1,2));
438
439 normals5711.push_back(Z2i::Vector(1,-5));
440 normals5711.push_back(Z2i::Vector(3,-4));
441 normals5711.push_back(Z2i::Vector(4,-3));
442 normals5711.push_back(Z2i::Vector(5,-1));
443 normals5711.push_back(Z2i::Vector(5,1));
444 normals5711.push_back(Z2i::Vector(4,3));
445 normals5711.push_back(Z2i::Vector(3,4));
446 normals5711.push_back(Z2i::Vector(1,5));
447
448 Metric mask5711(dirs5711,normals5711);
449
450 //Setting:
451 trace.beginBlock("Tessting shrinking using Q");
452 Point P(0,0);
453 Point Q(1,-2), QQ(1,2);
454 Point Lmin(10,-10);
455 Point Lmax(10,10);
456 Point midPointP,nextMidPointP;
457 Point midPointQ,nextMidPointQ;
458
459 Metric::ConstIterator itBeg = mask5711.begin();
460 Metric::ConstIterator itEnd = mask5711.end();
461
462 Metric::ConstIterator cone = mask5711.shrinkP(itBeg, itEnd, P, Q, Lmin, Lmax, 1, midPointP, nextMidPointP);
463 trace.info() <<" P - Shrink returns the cone "<< *cone<<" " <<*(cone+1)<<std::endl;
464 trace.info() <<" P - MidPoint "<< midPointP<<" " <<nextMidPointP<<std::endl<<std::endl;
465
466 Metric::ConstIterator cone2 = mask5711.shrinkP(itBeg, itEnd, Q, P, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
467 trace.info() <<" Q - Shrink returns the cone "<< *cone2<<" " <<*(cone2+1)<<std::endl;
468 trace.info() <<" Q - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl<<std::endl;
469 trace.info() << "Checking Voro cell" <<std::endl;
470
471 double dpmidp = mask5711(P,midPointP);
472 double dqmidp = mask5711(Q,midPointP);
473 trace.info() << ((dpmidp < dqmidp) ? "MidP closer to P" : "Mid closer to Q") << std::endl;
474 double dpnextmidp = mask5711(P,nextMidPointP);
475 double dqnextmidp = mask5711(Q,nextMidPointP);
476 trace.info() << ((dpnextmidp < dqnextmidp) ? "NextMidP closer to P" : "Mid closer to Q") << std::endl;
477 nbok += ( (dpmidp < dqmidp) != (dpnextmidp < dqnextmidp)) ? 1 : 0;
478 nb++;
479 trace.info() << "(" << nbok << "/" << nb << ") "
480 << " Shrink P contains the Voronoi Edge" << std::endl;
481
482 double dpmidq = mask5711(P,midPointQ);
483 double dqmidq = mask5711(Q,midPointQ);
484 trace.info() << ((dpmidq < dqmidq) ? "MidQ closer to P" : "Mid closer to Q") << std::endl;
485 double dpnextmidq = mask5711(P,nextMidPointQ);
486 double dqnextmidq = mask5711(Q,nextMidPointQ);
487 trace.info() << ((dpnextmidq < dqnextmidq) ? "NextMidP closer to P" : "Mid closer to Q") << std::endl;
488 nbok += ( (dpmidq < dqmidq) != (dpnextmidq < dqnextmidq)) ? 1 : 0;
489 nb++;
490 trace.info() << "(" << nbok << "/" << nb << ") "
491 << " Shrink Q contains the Voronoi Edge" << std::endl;
492
493 trace.beginBlock("Computing the lower");
494 Metric::Abscissa vorocell;
495 Metric::Vector normalP = mask5711.getNormalFromCone(cone);
496 Metric::Vector normalQ = mask5711.getNormalFromCone(cone2);
497 vorocell = static_cast<Metric::Abscissa>(floor((double) (P[1]*normalP[1] - Q[1]*normalQ[1] - (Lmin[0] - P[0])*normalP[0] + (Lmin[0] - Q[0])*normalQ[0]) /(normalP[1] - normalQ[1]) ));
498 Point voro(Lmin[0], vorocell);
499
500 trace.emphase() << " Lower Voronoi Cell Point "<< voro << " absc = "<<vorocell<<std::endl;
501 nbok += ( (voro >= midPointP) && (voro<nextMidPointP)) ? 1 : 0;
502 nb++;
503 trace.info() << "(" << nbok << "/" << nb << ") "
504 << " Voro cell in the cone of P" << std::endl;
505 nbok += ( (voro >= midPointQ) && (voro<nextMidPointQ)) ? 1 : 0;
506 nb++;
507 trace.info() << "(" << nbok << "/" << nb << ") "
508 << " Voro cell in the cone of Q" << std::endl;
509
510
511 nbok += ( (vorocell == mask5711.getLowerVoronoiEdgeAbscissa(P, Q, Lmin, Lmax, 1))) ? 1 : 0;
512 nb++;
513 trace.info() << "(" << nbok << "/" << nb << ") "
514 << " Voro cell == getLowerVoronoiEdgeAbscissa " << std::endl;
515
516 trace.endBlock();
517
518 trace.endBlock();
519
520
521 //Setting2
522 trace.beginBlock("Testing double shrinking on QQ");
523 Metric::ConstIterator coneQQ = mask5711.shrinkP(itBeg, itEnd, P, QQ, Lmin, Lmax, 1, midPointP, nextMidPointP);
524 trace.info() <<" P - Shrink returns the cone "<< *coneQQ<<" " <<*(coneQQ+1)<<std::endl;
525 trace.info() <<" P - MidPoint "<< midPointP<<" " <<nextMidPointP<<std::endl;
526 trace.info() <<" P - cone distance to P("<< mask5711(midPointP,P)<<","
527 << mask5711(nextMidPointP,P)<<")" <<std::endl;
528 trace.info() <<" P - cone distance to QQ("<< mask5711(midPointP,QQ)<<","
529 << mask5711(nextMidPointP,QQ)<<")" <<std::endl<<std::endl;
530
531 Metric::ConstIterator coneQQ2 = mask5711.shrinkP(itBeg, itEnd, QQ, P, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
532 trace.info() <<" QQ - Shrink returns the cone "<< *coneQQ2<<" " <<*(coneQQ2+1)<<std::endl;
533 trace.info() <<" QQ - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl;
534 trace.info() <<" QQ - cone distance to QQ("<< mask5711(midPointQ,QQ)<<","
535 << mask5711(nextMidPointQ,QQ)<<")" <<std::endl;
536 trace.info() <<" QQ - cone distance to P("<< mask5711(midPointQ,P)<<","
537 << mask5711(nextMidPointQ,P)<<")" <<std::endl;
538 trace.info() << "Checking Voro cell" <<std::endl<<std::endl;
539
540 dpmidp = mask5711(P,midPointP);
541 dqmidp = mask5711(QQ,midPointP);
542 trace.info() << ((dpmidp < dqmidp) ? "MidP closer to P" : "MidP closer to QQ") << std::endl;
543 dpnextmidp = mask5711(P,nextMidPointP);
544 dqnextmidp = mask5711(QQ,nextMidPointP);
545 trace.info() << ((dpnextmidp < dqnextmidp) ? "NextMidP closer to P" : "NextMidP closer to QQ") << std::endl;
546 nbok += ( (dpmidp < dqmidp) != (dpnextmidp < dqnextmidp)) ? 1 : 0;
547 nb++;
548 trace.info() << "(" << nbok << "/" << nb << ") "
549 << " Shrink P contains the Voronoi Edge" << std::endl;
550 trace.info()<< "Distances : ConeP<->P("<<dpmidp<<","<<dpnextmidp<<") ConeP<->Q("<<dqmidp<<","<<dqnextmidp<<")"<<std::endl;
551
552
553 dpmidq = mask5711(P,midPointQ);
554 dqmidq = mask5711(QQ,midPointQ);
555 trace.info() << ((dpmidq < dqmidq) ? "MidQ closer to P" : "MidQ closer to QQ") << std::endl;
556 dpnextmidq = mask5711(P,nextMidPointQ);
557 dqnextmidq = mask5711(QQ,nextMidPointQ);
558 trace.info() << ((dpnextmidq < dqnextmidq) ? "NextMidQ closer to P" : "NextMidQ closer to QQ") << std::endl;
559 nbok += ( (dpmidq < dqmidq) != (dpnextmidq < dqnextmidq)) ? 1 : 0;
560 nb++;
561 trace.info() << "(" << nbok << "/" << nb << ") "
562 << " Shrink QQ contains the Voronoi Edge" << std::endl;
563 trace.info()<< "Distances : ConeQ<->P("<<dpmidq<<","<<dpnextmidq<<") ConeQ<->QQ("<<dqmidq<<","<<dqnextmidq<<")"<<std::endl;
564 trace.endBlock();
565
566 trace.endBlock();
567
568 return nbok == nb;
569}

References DGtal::PointVector< dim, TEuclideanRing, TContainer >::begin(), DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testDoubleShrinkHorizontal()

bool testDoubleShrinkHorizontal ( )

Definition at line 572 of file testChamferDT.cpp.

573{
574 unsigned int nbok = 0;
575 unsigned int nb = 0;
576 trace.beginBlock ( "Testing Double Shrinking Horizontal...");
577
578 //5-7-11 metic
580 Metric::Directions dirs5711;
581 Metric::Directions normals5711;
582 //5-7-11 mask
583 dirs5711.push_back(Z2i::Vector(0,-1));
584 dirs5711.push_back(Z2i::Vector(1,-2));
585 dirs5711.push_back(Z2i::Vector(1,-1));
586 dirs5711.push_back(Z2i::Vector(2,-1));
587 dirs5711.push_back(Z2i::Vector(1,0));
588 dirs5711.push_back(Z2i::Vector(2,1));
589 dirs5711.push_back(Z2i::Vector(1,1));
590 dirs5711.push_back(Z2i::Vector(1,2));
591
592 normals5711.push_back(Z2i::Vector(1,-5));
593 normals5711.push_back(Z2i::Vector(3,-4));
594 normals5711.push_back(Z2i::Vector(4,-3));
595 normals5711.push_back(Z2i::Vector(5,-1));
596 normals5711.push_back(Z2i::Vector(5,1));
597 normals5711.push_back(Z2i::Vector(4,3));
598 normals5711.push_back(Z2i::Vector(3,4));
599 normals5711.push_back(Z2i::Vector(1,5));
600
601 Metric mask5711(dirs5711,normals5711);
602
603 //Setting:
604 trace.beginBlock("Testing shrinking using Q");
605 Point P(0,0);
606 Point Q(-2,1), QQ(2,1);
607 Point Lmin(-10,10);
608 Point Lmax(10,10);
609 Point midPointP,nextMidPointP;
610 Point midPointQ,nextMidPointQ;
611
612 Metric::ConstIterator itBeg = mask5711.begin();
613 Metric::ConstIterator itEnd = mask5711.end();
614
615 Metric::ConstIterator cone = mask5711.shrinkP(itBeg, itEnd, P, Q, Lmin, Lmax, 0, midPointP, nextMidPointP);
616 trace.info() <<" P - Shrink returns the cone "<< *cone<<" " <<*(cone+1)<<std::endl;
617 trace.info() <<" P - MidPoint "<< midPointP<<" " <<nextMidPointP<<std::endl<<std::endl;
618
619 Metric::ConstIterator cone2 = mask5711.shrinkP(itBeg, itEnd, Q, P, Lmin, Lmax, 0, midPointQ, nextMidPointQ);
620 trace.info() <<" Q - Shrink returns the cone "<< *cone2<<" " <<*(cone2+1)<<std::endl;
621 trace.info() <<" Q - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl<<std::endl;
622 trace.info() << "Checking Voro cell" <<std::endl;
623
624
625 double dpmidp = mask5711(P,midPointP);
626 double dqmidp = mask5711(Q,midPointP);
627 trace.info() << ((dpmidp < dqmidp) ? "MidP closer to P" : "Mid closer to Q") << std::endl;
628 double dpnextmidp = mask5711(P,nextMidPointP);
629 double dqnextmidp = mask5711(Q,nextMidPointP);
630 trace.info() << ((dpnextmidp < dqnextmidp) ? "NextMidP closer to P" : "Mid closer to Q") << std::endl;
631 nbok += ( (dpmidp < dqmidp) != (dpnextmidp < dqnextmidp)) ? 1 : 0;
632 nb++;
633 trace.info() << "(" << nbok << "/" << nb << ") "
634 << " Shrink P contains the Voronoi Edge" << std::endl;
635
636
637 double dpmidq = mask5711(P,midPointQ);
638 double dqmidq = mask5711(Q,midPointQ);
639 trace.info() << ((dpmidq < dqmidq) ? "MidQ closer to P" : "Mid closer to Q") << std::endl;
640 double dpnextmidq = mask5711(P,nextMidPointQ);
641 double dqnextmidq = mask5711(Q,nextMidPointQ);
642 trace.info() << ((dpnextmidq < dqnextmidq) ? "NextMidP closer to P" : "Mid closer to Q") << std::endl;
643 nbok += ( (dpmidq < dqmidq) != (dpnextmidq < dqnextmidq)) ? 1 : 0;
644 nb++;
645 trace.info() << "(" << nbok << "/" << nb << ") "
646 << " Shrink Q contains the Voronoi Edge" << std::endl;
647 trace.endBlock();
648
649 //Setting2
650 trace.beginBlock("Testing double shrinking on QQ");
651 Metric::ConstIterator coneQQ = mask5711.shrinkP(itBeg, itEnd, P, QQ, Lmin, Lmax, 0, midPointP, nextMidPointP);
652 trace.info() <<" P - Shrink returns the cone "<< *coneQQ<<" " <<*(coneQQ+1)<<std::endl;
653 trace.info() <<" P - MidPoint "<< midPointP<<" " <<nextMidPointP<<std::endl;
654 trace.info() <<" P - cone distance to P("<< mask5711(midPointP,P)<<","
655 << mask5711(nextMidPointP,P)<<")" <<std::endl;
656 trace.info() <<" P - cone distance to QQ("<< mask5711(midPointP,QQ)<<","
657 << mask5711(nextMidPointP,QQ)<<")" <<std::endl<<std::endl;
658
659 Metric::ConstIterator coneQQ2 = mask5711.shrinkP(itBeg, itEnd, QQ, P, Lmin, Lmax, 0, midPointQ, nextMidPointQ);
660 trace.info() <<" QQ - Shrink returns the cone "<< *coneQQ2<<" " <<*(coneQQ2+1)<<std::endl;
661 trace.info() <<" QQ - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl;
662 trace.info() <<" QQ - cone distance to QQ("<< mask5711(midPointQ,QQ)<<","
663 << mask5711(nextMidPointQ,QQ)<<")" <<std::endl;
664 trace.info() <<" QQ - cone distance to P("<< mask5711(midPointQ,P)<<","
665 << mask5711(nextMidPointQ,P)<<")" <<std::endl;
666 trace.info() << "Checking Voro cell" <<std::endl<<std::endl;
667
668 dpmidp = mask5711(P,midPointP);
669 dqmidp = mask5711(QQ,midPointP);
670 trace.info() << ((dpmidp < dqmidp) ? "MidP closer to P" : "MidP closer to QQ") << std::endl;
671 dpnextmidp = mask5711(P,nextMidPointP);
672 dqnextmidp = mask5711(QQ,nextMidPointP);
673 trace.info() << ((dpnextmidp < dqnextmidp) ? "NextMidP closer to P" : "NextMidP closer to QQ") << std::endl;
674 nbok += ( (dpmidp < dqmidp) != (dpnextmidp < dqnextmidp)) ? 1 : 0;
675 nb++;
676 trace.info() << "(" << nbok << "/" << nb << ") "
677 << " Shrink P contains the Voronoi Edge" << std::endl;
678 trace.info()<< "Distances : ConeP<->P("<<dpmidp<<","<<dpnextmidp<<") ConeP<->Q("<<dqmidp<<","<<dqnextmidp<<")"<<std::endl;
679
680
681 dpmidq = mask5711(P,midPointQ);
682 dqmidq = mask5711(QQ,midPointQ);
683 trace.info() << ((dpmidq < dqmidq) ? "MidQ closer to P" : "MidQ closer to QQ") << std::endl;
684 dpnextmidq = mask5711(P,nextMidPointQ);
685 dqnextmidq = mask5711(QQ,nextMidPointQ);
686 trace.info() << ((dpnextmidq < dqnextmidq) ? "NextMidQ closer to P" : "NextMidQ closer to QQ") << std::endl;
687 nbok += ( (dpmidq < dqmidq) != (dpnextmidq < dqnextmidq)) ? 1 : 0;
688 nb++;
689 trace.info() << "(" << nbok << "/" << nb << ") "
690 << " Shrink QQ contains the Voronoi Edge" << std::endl;
691 trace.info()<< "Distances : ConeQ<->P("<<dpmidq<<","<<dpnextmidq<<") ConeQ<->QQ("<<dqmidq<<","<<dqnextmidq<<")"<<std::endl;
692 trace.endBlock();
693
694 trace.endBlock();
695
696
697 return nbok == nb;
698}

References DGtal::PointVector< dim, TEuclideanRing, TContainer >::begin(), DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testHiddenBy()

bool testHiddenBy ( )

Definition at line 701 of file testChamferDT.cpp.

702{
703 unsigned int nbok = 0;
704 unsigned int nb = 0;
705 trace.beginBlock ( "Testing HiddenBy...");
706
707 //5-7-11 metic
709 Metric::Directions dirs5711;
710 Metric::Directions normals5711;
711 //5-7-11 mask
712 dirs5711.push_back(Z2i::Vector(0,-1));
713 dirs5711.push_back(Z2i::Vector(1,-2));
714 dirs5711.push_back(Z2i::Vector(1,-1));
715 dirs5711.push_back(Z2i::Vector(2,-1));
716 dirs5711.push_back(Z2i::Vector(1,0));
717 dirs5711.push_back(Z2i::Vector(2,1));
718 dirs5711.push_back(Z2i::Vector(1,1));
719 dirs5711.push_back(Z2i::Vector(1,2));
720
721 normals5711.push_back(Z2i::Vector(1,-5));
722 normals5711.push_back(Z2i::Vector(3,-4));
723 normals5711.push_back(Z2i::Vector(4,-3));
724 normals5711.push_back(Z2i::Vector(5,-1));
725 normals5711.push_back(Z2i::Vector(5,1));
726 normals5711.push_back(Z2i::Vector(4,3));
727 normals5711.push_back(Z2i::Vector(3,4));
728 normals5711.push_back(Z2i::Vector(1,5));
729
730 Metric mask5711(dirs5711,normals5711);
731
732 //Setting:
733 Point U(0,0);
734 Point V(0,3);
735 Point VV(-10,3);
736 Point W(0,6);
737 Point Lmin(10,-10);
738 Point Lmax(10,10);
739
740 Point Usym(20,0);
741 Point Vsym(20,3);
742 Point VVsym(30,3);
743 Point Wsym(20,6);
744
745 Point LminH(-10,10);
746 Point LmaxH(10,10);
747
748 Point UH(0,0);
749 Point VH(3,0);
750 Point VVH(3,-10);
751 Point WH(6,0);
752
753
754 nbok += ( mask5711.hiddenBy(U,V, W, Lmin, Lmax, 1) == false ) ? 1 : 0;
755 nb++;
756 trace.info() << "(" << nbok << "/" << nb << ") "
757 << " H(U,V,W) is false" << std::endl;
758
759 nbok += ( mask5711.hiddenBy(U,VV, W, Lmin, Lmax, 1) == true ) ? 1 : 0;
760 nb++;
761 trace.info() << "(" << nbok << "/" << nb << ") "
762 << " H(U,VV,W) is true" << std::endl;
763
764 nbok += ( mask5711.hiddenBy(Usym,Vsym, Wsym, Lmin, Lmax, 1) == false ) ? 1 : 0;
765 nb++;
766 trace.info() << "(" << nbok << "/" << nb << ") "
767 << " H(Usym,Vsym,Wsym) is false" << std::endl;
768
769 nbok += ( mask5711.hiddenBy(Usym,VVsym, Wsym, Lmin, Lmax, 1) == true ) ? 1 : 0;
770 nb++;
771 trace.info() << "(" << nbok << "/" << nb << ") "
772 << " H(Usym,VVsym,Wsym) is true" << std::endl;
773
774 nbok += ( mask5711.hiddenBy(UH,VH, WH, LminH, LmaxH, 0) == false ) ? 1 : 0;
775 nb++;
776 trace.info() << "(" << nbok << "/" << nb << ") "
777 << " H(UH,VH,WH) is false" << std::endl;
778
779 nbok += ( mask5711.hiddenBy(UH,VVH, WH, LminH, LmaxH, 0) == true ) ? 1 : 0;
780 nb++;
781 trace.info() << "(" << nbok << "/" << nb << ") "
782 << " H(UH,VVH,WH) is true" << std::endl;
783
784 trace.endBlock();
785 return nb == nbok;
786}

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testIntersection()

bool testIntersection ( )

Definition at line 214 of file testChamferDT.cpp.

215{
216 unsigned int nbok = 0;
217 unsigned int nb = 0;
218 trace.beginBlock ( "Testing intersection...");
219
220 Point P(0,0),Q(7,3),Qb(7,-3), Q2(2, -10), Q3(2,10);
221 Point Lmin(10,-10), Lmax(10,10);
223
224 trace.info() << "Intersection "<<P<<" "<<Q<<" = "
225 << mask.getLowerRayIntersection(P,Q,Lmin,Lmax, 1)<<std::endl;
226 nbok += ( mask.getLowerRayIntersection(P,Q,Lmin,Lmax, 1) == 4) ? 1 : 0;
227 nb++;
228 trace.info() << "(" << nbok << "/" << nb << ") "
229 << "inter==4" << std::endl;
230
231 trace.info() << "Intersection "<<P<<" "<<Qb<<" = "
232 << mask.getLowerRayIntersection(P,Qb,Lmin,Lmax, 1)<<std::endl;
233 nbok += ( mask.getLowerRayIntersection(P,Qb,Lmin,Lmax, 1) == -5) ? 1 : 0;
234 nb++;
235 trace.info() << "(" << nbok << "/" << nb << ") "
236 << "inter==-5" << std::endl;
237
238 trace.info() << "Intersection "<<P<<" "<<Q2<<" = "
239 << mask.getLowerRayIntersection(P,Q2,Lmin,Lmax, 1)<<std::endl;
240 nbok += ( mask.getLowerRayIntersection(P,Q2,Lmin,Lmax, 1) <= Lmin[1]) ? 1 : 0;
241 nb++;
242 trace.info() << "(" << nbok << "/" << nb << ") "
243 << "inter==Lmin" << std::endl;
244
245 trace.info() << "Intersection "<<P<<" "<<Q3<<" = "
246 << mask.getLowerRayIntersection(P,Q3,Lmin,Lmax, 1)<<std::endl;
247 nbok += ( mask.getLowerRayIntersection(P,Q3,Lmin,Lmax, 1) >= Lmax[1]) ? 1 : 0;
248 nb++;
249 trace.info() << "(" << nbok << "/" << nb << ") "
250 << "inter==Lmax" << std::endl;
251
252 trace.info()<<std::endl;
253
254 Point PP(0,0),QQ(3,7),QQb(-3,7), QQ2(-10, 2), QQ3(10, 2);
255 Point LLmin(-10,10), LLmax(10,10);
256
257 trace.info() << "Intersection "<<PP<<" "<<QQ<<" = "
258 << mask.getLowerRayIntersection(PP,QQ,LLmin,LLmax, 0)<<std::endl;
259 nbok += ( mask.getLowerRayIntersection(PP,QQ,LLmin,LLmax, 0) == 4) ? 1 : 0;
260 nb++;
261 trace.info() << "(" << nbok << "/" << nb << ") "
262 << "inter==4" << std::endl;
263
264 trace.info() << "Intersection "<<PP<<" "<<QQb<<" = "
265 << mask.getLowerRayIntersection(PP,QQb,LLmin,LLmax, 0)<<std::endl;
266 nbok += ( mask.getLowerRayIntersection(PP,QQb,LLmin,LLmax, 0) == -5) ? 1 : 0;
267 nb++;
268 trace.info() << "(" << nbok << "/" << nb << ") "
269 << "inter==-5" << std::endl;
270
271 trace.info() << "Intersection "<<PP<<" "<<QQ2<<" = "
272 << mask.getLowerRayIntersection(PP,QQ2,LLmin,LLmax, 0)<<std::endl;
273 nbok += ( mask.getLowerRayIntersection(PP,QQ2,LLmin,LLmax, 0) <= LLmin[0]) ? 1 : 0;
274 nb++;
275 trace.info() << "(" << nbok << "/" << nb << ") "
276 << "inter==Lmin" << std::endl;
277
278 trace.info() << "Intersection "<<PP<<" "<<QQ3<<" = "
279 << mask.getLowerRayIntersection(PP,QQ3,LLmin,LLmax, 0)<<std::endl;
280 nbok += ( mask.getLowerRayIntersection(PP,QQ3,LLmin,LLmax, 0) >= LLmax[0]) ? 1 : 0;
281 nb++;
282 trace.info() << "(" << nbok << "/" << nb << ") "
283 << "inter==Lmax" << std::endl;
284
285 return nbok == nb;
286}

References DGtal::Trace::beginBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().

◆ testShrink()

bool testShrink ( )

Definition at line 289 of file testChamferDT.cpp.

290{
291 unsigned int nbok = 0;
292 unsigned int nb = 0;
293 trace.beginBlock ( "Testing shrinking...");
294
295 //5-7-11 metic
297 Metric::Directions dirs5711;
298 Metric::Directions normals5711;
299 //5-7-11 mask
300 dirs5711.push_back(Z2i::Vector(0,-1));
301 dirs5711.push_back(Z2i::Vector(1,-2));
302 dirs5711.push_back(Z2i::Vector(1,-1));
303 dirs5711.push_back(Z2i::Vector(2,-1));
304 dirs5711.push_back(Z2i::Vector(1,0));
305 dirs5711.push_back(Z2i::Vector(2,1));
306 dirs5711.push_back(Z2i::Vector(1,1));
307 dirs5711.push_back(Z2i::Vector(1,2));
308
309 normals5711.push_back(Z2i::Vector(1,-5));
310 normals5711.push_back(Z2i::Vector(3,-4));
311 normals5711.push_back(Z2i::Vector(4,-3));
312 normals5711.push_back(Z2i::Vector(5,-1));
313 normals5711.push_back(Z2i::Vector(5,1));
314 normals5711.push_back(Z2i::Vector(4,3));
315 normals5711.push_back(Z2i::Vector(3,4));
316 normals5711.push_back(Z2i::Vector(1,5));
317
318 Metric mask5711(dirs5711,normals5711);
319
320 //Setting:
321 Point P(0,0);
322 Point Q(1,-2), QQ(1,2);
323 Point Lmin(10,0);
324 Point Lmax(10,10);
325 Metric::ConstIterator itBeg = mask5711.begin();
326 Metric::ConstIterator itEnd = mask5711.end();
327
328 Point midPoint, nextMidPoint;
329
330 Metric::ConstIterator cone = mask5711.shrinkPSubMask(itBeg, itEnd, P, Q, Lmin, Lmax, 1, midPoint, nextMidPoint);
331 trace.info() <<"Shrink returns the cone "<< *cone<<" " <<*(cone+1)<<std::endl;
332 trace.info() <<"MidPoint "<< midPoint<<" " <<nextMidPoint<<std::endl<<std::endl;
333 nbok += ( midPoint == Point(10,0)) ? 1 : 0;
334 nb++;
335 trace.info() << "(" << nbok << "/" << nb << ") "
336 << "midPoint = (10,0)" << std::endl;
337 nbok += ( nextMidPoint == Point(10,5)) ? 1 : 0;
338 nb++;
339 trace.info() << "(" << nbok << "/" << nb << ") "
340 << "nextMidPoint = (10,5)" << std::endl;
341
342
343 trace.warning()<<" Shrinking with QQ(1,2)"<<std::endl;
344
345 Metric::ConstIterator cone2 = mask5711.shrinkPSubMask(itBeg, itEnd, P, QQ, Lmin, Lmax, 1, midPoint, nextMidPoint);
346 trace.info() <<"Shrink returns the cone2 "<< *cone2<<" " <<*(cone2+1)<<std::endl;
347 trace.info() <<"MidPoint "<< midPoint<<" " <<nextMidPoint<<std::endl<<std::endl;
348 nbok += ( midPoint == Point(10,-5)) ? 1 : 0;
349 nb++;
350 trace.info() << "(" << nbok << "/" << nb << ") "
351 << "midPoint = (10,0)" << std::endl;
352 nbok += ( nextMidPoint == Point(10,0)) ? 1 : 0;
353 nb++;
354 trace.info() << "(" << nbok << "/" << nb << ") "
355 << "nextMidPoint = (10,5)" << std::endl;
356
357
358 trace.beginBlock("Testing Symmetry");
359 Point LLmin(-10,0);
360 Point LLmax(-10,10);
361 Point QQQ(-1,-2);
362 Metric::ConstIterator cone3 = mask5711.shrinkP(itBeg, itEnd, P, QQQ, LLmin, LLmax, 1, midPoint, nextMidPoint);
363 trace.info() <<"Shrink returns the cone3 "<< *cone3<<" " <<*(cone3+1)<<std::endl;
364 trace.info() <<"MidPoint "<< midPoint<<" " <<nextMidPoint<<std::endl<<std::endl;
365 nbok += ( midPoint == Point(-10,0)) ? 1 : 0;
366 nb++;
367 trace.info() << "(" << nbok << "/" << nb << ") "
368 << "midPoint = (-10,0)" << std::endl;
369 nbok += ( nextMidPoint == Point(-10,5)) ? 1 : 0;
370 nb++;
371 trace.info() << "(" << nbok << "/" << nb << ") "
372 << "nextMidPoint = (-10,5)" << std::endl;
373 trace.endBlock();
374
375 //horizontal
376 trace.beginBlock("Testing H/V symmetry");
377 Point LLLmin(0,10);
378 Point LLLmax(10,10);
379 Point Qhori(-2,1);
380 Metric::ConstIterator cone4 = mask5711.shrinkP(itBeg, itEnd, P, Qhori, LLLmin, LLLmax, 0, midPoint, nextMidPoint);
381 trace.info() <<"Shrink returns the cone3 "<< *cone4<<" " <<*(cone4+1)<<std::endl;
382 trace.info() <<"MidPoint "<< midPoint<<" " <<nextMidPoint<<std::endl<<std::endl;
383 nbok += ( *cone4 == *cone) ? 1 : 0;
384 nb++;
385 trace.info() << "(" << nbok << "/" << nb << ") "
386 << "horiz==vert" << std::endl;
387 nbok += ( midPoint == Point(0,10)) ? 1 : 0;
388 nb++;
389 trace.info() << "(" << nbok << "/" << nb << ") "
390 << "midPoint = (0,10)" << std::endl;
391 nbok += ( nextMidPoint == Point(5,10)) ? 1 : 0;
392 nb++;
393 trace.info() << "(" << nbok << "/" << nb << ") "
394 << "nextMidPoint = (5,10)" << std::endl;
395
396 Point LLLLmin(0,-10);
397 Point LLLLmax(10,-10);
398 Point QQhori(-2,-1);
399 Metric::ConstIterator cone5 = mask5711.shrinkP(itBeg, itEnd, P, QQhori, LLLLmin, LLLLmax, 0, midPoint, nextMidPoint);
400 trace.info() <<"Shrink returns the cone3 "<< *cone4<<" " <<*(cone4+1)<<std::endl;
401 trace.info() <<"MidPoint "<< midPoint<<" " <<nextMidPoint<<std::endl;
402 nbok += ( *cone5 == *cone) ? 1 : 0;
403 nb++;
404 trace.info() << "(" << nbok << "/" << nb << ") "
405 << "horiz==vert" << std::endl;
406 nbok += ( midPoint == Point(0,-10)) ? 1 : 0;
407 nb++;
408 trace.info() << "(" << nbok << "/" << nb << ") "
409 << "midPoint = (0,-10)" << std::endl;
410 nbok += ( nextMidPoint == Point(5,-10)) ? 1 : 0;
411 nb++;
412 trace.info() << "(" << nbok << "/" << nb << ") "
413 << "nextMidPoint = (5,-10)" << std::endl;
414 trace.endBlock();
415
416 trace.endBlock();
417 return nbok == nb;
418}

References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), DGtal::trace, and DGtal::Trace::warning().

Referenced by main().

◆ testSpecialCase()

bool testSpecialCase ( )

Definition at line 882 of file testChamferDT.cpp.

883{
884 unsigned int nbok = 0;
885 unsigned int nb = 0;
886
887 //5-7-11 metic
889 Metric::Directions dirs5711;
890 Metric::Directions normals5711;
891 //5-7-11 mask
892 dirs5711.push_back(Z2i::Vector(0,-1));
893 dirs5711.push_back(Z2i::Vector(1,-2));
894 dirs5711.push_back(Z2i::Vector(1,-1));
895 dirs5711.push_back(Z2i::Vector(2,-1));
896 dirs5711.push_back(Z2i::Vector(1,0));
897 dirs5711.push_back(Z2i::Vector(2,1));
898 dirs5711.push_back(Z2i::Vector(1,1));
899 dirs5711.push_back(Z2i::Vector(1,2));
900
901 normals5711.push_back(Z2i::Vector(1,-5));
902 normals5711.push_back(Z2i::Vector(3,-4));
903 normals5711.push_back(Z2i::Vector(4,-3));
904 normals5711.push_back(Z2i::Vector(5,-1));
905 normals5711.push_back(Z2i::Vector(5,1));
906 normals5711.push_back(Z2i::Vector(4,3));
907 normals5711.push_back(Z2i::Vector(3,4));
908 normals5711.push_back(Z2i::Vector(1,5));
909
910 Metric mask5711(dirs5711,normals5711);
911
912 trace.beginBlock ( "Testing special cases...");
913 //Setting:
914 Point U(12,-12);
915 Point V(6,0);
916 Point W(-16,3);
917 Point Lmin(11,-20);
918 Point Lmax(11,20);
919 Point midPointP,nextMidPointP;
920 Point midPointQ,nextMidPointQ;
921
922 Metric::ConstIterator itBeg = mask5711.begin();
923 Metric::ConstIterator itEnd = mask5711.end();
924
925
926 Metric::ConstIterator cone2 = mask5711.shrinkP(itBeg, itEnd, V, W, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
927 Metric::ConstIterator cone3 = mask5711.shrinkP(itBeg, itEnd, W, V, Lmin, Lmax, 1, midPointQ, nextMidPointQ);
928
929 trace.info() <<" V - W Shrink returns the cone "<< *cone2<<" " <<*(cone2+1)<<std::endl;
930 trace.info() <<" W - V Shrink returns the cone "<< *cone3<<" " <<*(cone3+1)<<std::endl;
931 trace.info() <<" Q - MidPoint "<< midPointQ<<" " <<nextMidPointQ<<std::endl<<std::endl;
932
933 Metric::Abscissa pos = mask5711.getLowerVoronoiEdgeAbscissa(V, W, Lmin, Lmax, 1);
934 trace.info() << " Pos = "<<pos<<std::endl;
935
936
937
938 nbok += ( mask5711.hiddenBy(U,V, W, Lmin, Lmax, 1) == false ) ? 1 : 0;
939 nb++;
940 trace.info() << "(" << nbok << "/" << nb << ") "
941 << " H(U,V,W) is false" << std::endl;
942
943
944
945 return nbok == nb;
946
947
948
949}

References DGtal::PointVector< dim, TEuclideanRing, TContainer >::begin(), DGtal::Trace::beginBlock(), DGtal::Trace::info(), and DGtal::trace.

Referenced by main().