38 #include "DGtal/base/Common.h"
39 #include "DGtal/base/Exceptions.h"
40 #include "DGtal/kernel/SpaceND.h"
42 #include "DGtal/kernel/domains/HyperRectDomain.h"
43 #include "DGtal/geometry/curves/FrechetShortcut.h"
44 #include "DGtal/io/boards/Board2D.h"
46 #include "DGtal/io/boards/CDrawableWithBoard2D.h"
47 #include "DGtal/geometry/curves/CForwardSegmentComputer.h"
48 #include "DGtal/helpers/StdDefs.h"
50 #include "DGtal/geometry/curves/GreedySegmentation.h"
56 using namespace DGtal;
57 using namespace LibBoard;
67 bool testFrechetShortcut()
69 unsigned int nbok = 0;
73 typedef std::vector<Point>::iterator Iterator;
76 std::vector<Point> contour;
77 contour.push_back(Point(0,0));
78 contour.push_back(Point(1,0));
79 contour.push_back(Point(2,0));
80 contour.push_back(Point(3,0));
81 contour.push_back(Point(4,0));
82 contour.push_back(Point(5,0));
83 contour.push_back(Point(6,0));
84 contour.push_back(Point(7,0));
85 contour.push_back(Point(7,1));
86 contour.push_back(Point(6,1));
87 contour.push_back(Point(5,1));
88 contour.push_back(Point(4,1));
89 contour.push_back(Point(3,1));
90 contour.push_back(Point(2,1));
91 contour.push_back(Point(3,2));
92 contour.push_back(Point(4,2));
93 contour.push_back(Point(5,2));
94 contour.push_back(Point(6,2));
95 contour.push_back(Point(7,2));
96 contour.push_back(Point(8,2));
97 contour.push_back(Point(9,2));
102 s.init(contour.begin());
106 while ( (s.end() != contour.end())
107 &&(s.extendForward()) ) {}
119 void testFrechetShortcutConceptChecking()
122 typedef std::vector<Point>::const_iterator ConstIterator;
129 bool testSegmentation()
131 unsigned int nbok = 0;
138 std::vector<Point> contour;
139 contour.push_back(Point(0,0));
140 contour.push_back(Point(1,0));
141 contour.push_back(Point(2,0));
142 contour.push_back(Point(3,0));
143 contour.push_back(Point(4,0));
144 contour.push_back(Point(5,0));
145 contour.push_back(Point(6,0));
146 contour.push_back(Point(7,0));
147 contour.push_back(Point(7,1));
148 contour.push_back(Point(6,1));
149 contour.push_back(Point(5,1));
150 contour.push_back(Point(4,1));
151 contour.push_back(Point(3,1));
152 contour.push_back(Point(2,1));
153 contour.push_back(Point(2,2));
154 contour.push_back(Point(3,2));
155 contour.push_back(Point(4,2));
156 contour.push_back(Point(5,2));
157 contour.push_back(Point(6,2));
158 contour.push_back(Point(7,2));
159 contour.push_back(Point(8,2));
160 contour.push_back(Point(9,2));
164 typedef Curve::PointsRange::ConstIterator Iterator;
168 aCurve.initFromVector(contour);
170 typedef Curve::PointsRange
Range;
171 Range r = aCurve.getPointsRange();
175 board << aCurve.getArrowsRange();
184 Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer(error) );
186 Segmentation::SegmentComputerIterator it = theSegmentation.
begin();
187 Segmentation::SegmentComputerIterator itEnd = theSegmentation.
end();
189 for ( ; it != itEnd; ++it) {
190 SegmentComputer s(*it);
196 trace.
info() << theSegmentation << std::endl;
197 board.
saveEPS(
"FrechetShortcutGreedySegmentationTest.eps", Board2D::BoundingBox, 5000 );
218 int main(
int argc,
char** argv )
222 for (
int i = 0; i < argc; ++i )
226 testFrechetShortcutConceptChecking();
228 bool res = testFrechetShortcut() && testSegmentation();
229 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;