bool drawingTestStabbingCircleComputer(const TCurve& curve, const string& suffix) { typedef typename TCurve::IncidentPointsRange Range; //range Range r = curve.getIncidentPointsRange(); //range { typedef typename Range::ConstIterator ConstIterator; //iterator StabbingCircleComputer<ConstIterator> s; longestSegment(s,r.begin(),r.end()); Board2D board; board << r << s; std::stringstream ss; ss << "StabbingCircleComputerDrawingTest" << suffix << ".eps"; board.saveEPS(ss.str().c_str()); } { typedef typename Range::ConstReverseIterator ConstReverseIterator; //iterator StabbingCircleComputer<ConstReverseIterator> s; longestSegment(s,r.rbegin(),r.rend()); Board2D board; board << r << s; std::stringstream ss; ss << "StabbingCircleComputerDrawingTest" << suffix << "2.eps"; board.saveEPS(ss.str().c_str()); } return true; }
bool drawingTestGeometricalDSS(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range typedef typename Range::ConstIterator ConstIterator; //iterator Range r = curve.getIncidentPointsRange(); //range GeometricalDSS<ConstIterator> s; ConstIterator itEnd (r.end()); s.init( r.begin() ); while ( (s.end() != itEnd) && (s.extendForward()) ) {} double a, b, c; s.getParameters(a,b,c); Board2D board; board << r << s; board.saveEPS("GeometricalDSSdrawingTest.eps"); return true; }
bool drawingTestStabbingLineComputer(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range typedef typename Range::ConstIterator ConstIterator; //iterator Range r = curve.getIncidentPointsRange(); //range StabbingLineComputer<ConstIterator> s; ConstIterator itEnd (r.end()); s.init( r.begin() ); while ( (s.end() != itEnd) && (s.extendFront()) ) {} double a, b, c; s.getParameters(a,b,c); Board2D board; board << r << s; board.saveEPS("StabbingLineComputerdrawingTest.eps"); return true; }
bool testSegmentation(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range Range r = curve.getIncidentPointsRange(); //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef StabbingCircleComputer<ConstIterator> SegmentComputer; //segment computer unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Greedy segmentation" ); { typedef GreedySegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << SetMode(SegmentComputer().className(), "Sector") << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveSVG("StabbingCircleComputerGreedySegmentationTest.svg", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results given by another program bool flag = ((r.size()==85)&&(n==6)&&(suml==90)&&((r.size()+n-1)==suml)); nbok += flag ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Saturated segmentation" ); { typedef SaturatedSegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); theSegmentation.setMode("Last"); Board2D board; board << curve; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << SetMode(SegmentComputer().className(), "Annulus") << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveSVG("StabbingCircleComputerSaturatedSegmentationTest.svg", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results given by another program nbok += ((r.size()==85)&&(n==20)&&(suml==326)) ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return (nbok == nb); }
bool testStabbingCircleComputer(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef typename Range::ConstReverseIterator ConstReverseIterator; //reverse iterator unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Constructors, copy, assignement" ); { Range r = curve.getIncidentPointsRange(); //range StabbingCircleComputer<ConstIterator> s1, s2, s3; longestSegment(s2, r.begin(), r.end()); longestSegment(s3, r.begin()+1, r.end()); StabbingCircleComputer<ConstIterator> s4(s2); StabbingCircleComputer<ConstIterator> s5(s3); s3 = s1; trace.info() << s1.isValid() << s1 << endl; trace.info() << s2.isValid() << s2 << endl; trace.info() << s3.isValid() << s3 << endl; trace.info() << s4.isValid() << s4 << endl; trace.info() << s5.isValid() << s5 << endl; bool myFlag = (!s1.isValid())&&(!s3.isValid()) &&(s2.isValid())&&(s4.isValid())&&(s5.isValid()) &&(s2 == s4)&&(s2 != s5)&&(s2 != s1) &&(s3 != s5)&&(s1 == s3); nbok += myFlag ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Extension operations" ); { Range r = curve.getIncidentPointsRange(); //range StabbingCircleComputer<ConstIterator> s, t; trace.info() << "forward extension " << endl; ConstIterator itBegin (r.begin()); ConstIterator itEnd (r.end()); s.init( itBegin ); while ( (s.end() != itEnd) && (s.isExtendableFront()) && (s.extendFront()) ) {} trace.info() << s << endl; ConstIterator itLast (s.end()); --itLast; t.init( itLast ); while ( (t.begin() != itBegin) && (t.extendBack()) ) {} trace.info() << t << endl; trace.info() << "backward extension " << endl; typename StabbingCircleComputer<ConstIterator>::Reverse rs = s.getReverse(); ConstReverseIterator ritBegin ( s.end() ); ConstReverseIterator ritEnd ( itBegin ); rs.init( ritBegin ); while ( (rs.end() != ritEnd) && (rs.isExtendableFront()) && (rs.extendFront()) ) {} trace.info() << rs << endl; ConstReverseIterator ritLast (rs.end()); --ritLast; typename StabbingCircleComputer<ConstIterator>::Reverse rt = t.getReverse(); rt.init( ritLast ); while ( (rt.begin() != ritBegin) && (rt.extendBack()) ) {} trace.info() << rt << endl; trace.info() << "comparison... " << endl; bool myFlag = (s == t) &&(rs == rt); nbok += myFlag ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return nbok == nb; }
bool testGeometricalDSS(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef typename Range::ConstReverseIterator ConstReverseIterator; //reverse iterator unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Constructors, copy, assignement" ); { Range r = curve.getIncidentPointsRange(); //range GeometricalDSS<ConstIterator> s1, s2, s3; s2.init(r.begin()); s3.init(++r.begin()); GeometricalDSS<ConstIterator> s4(s2); GeometricalDSS<ConstIterator> s5(s3); s3 = s1; trace.info() << s1.isValid() << s1 << endl; trace.info() << s2.isValid() << s2 << endl; trace.info() << s3.isValid() << s3 << endl; trace.info() << s4.isValid() << s4 << endl; trace.info() << s5.isValid() << s5 << endl; bool myFlag = (!s1.isValid())&&(!s3.isValid()) &&(s2.isValid())&&(s4.isValid())&&(s5.isValid()) &&(s2 == s4)&&(s3 != s5)&&(s1 == s3)&&(s2 != s5); nbok += myFlag ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Extension operations" ); { Range r = curve.getIncidentPointsRange(); //range GeometricalDSS<ConstIterator> s, t; trace.info() << "forward extension " << endl; ConstIterator itBegin (r.begin()); ConstIterator itEnd (r.end()); s.init( itBegin+1 ); while ( (s.end() != itEnd) && (s.isExtendableForward()) && (s.extendForward()) ) {} trace.info() << s << endl; double a, b, c; s.getParameters(a,b,c); trace.info() << a << " " << b << " " << c << endl; t.init( (itBegin + (itEnd - itBegin)/2) ); while ( (t.end() != itEnd) && (t.extendForward()) && (t.begin() != itBegin) && (t.extendBackward()) ) {} trace.info() << t << endl; trace.info() << "backward extension " << endl; typename GeometricalDSS<ConstIterator>::Reverse rs = s.getReverse(); ConstReverseIterator ritBegin (t.end()); ConstReverseIterator ritEnd (r.rend()); rs.init( ritBegin ); while ( (rs.end() != ritEnd) && (rs.isExtendableForward()) && (rs.extendForward()) ) {} trace.info() << rs << endl; double ap, bp, cp; rs.getParameters(ap,bp,cp); trace.info() << ap << " " << bp << " " << cp << endl; typename GeometricalDSS<ConstIterator>::Reverse rt = t.getReverse(); rt.init( (ritBegin + (ritEnd - ritBegin)/2) ); while ( (rt.begin() != ritBegin) && (rt.extendBackward()) && (rt.end() != ritEnd) && (rt.extendForward()) ) {} trace.info() << rt << endl; trace.info() << "comparison... " << endl; bool myFlag = ( (s == t)&&(rs == rt) ) && ( s.getUf() == rs.getUf() ) && ( s.getUl() == rs.getUl() ) && ( s.getLf() == rs.getLf() ) && ( s.getLl() == rs.getLl() ) && (a == ap) && (b == bp) && (c == cp) ; nbok += myFlag ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return nbok == nb; }
bool testSegmentation(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range Range r = curve.getIncidentPointsRange(); //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef GeometricalDSS<ConstIterator> SegmentComputer; //segment computer unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Greedy segmentation" ); { typedef GreedySegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveEPS("GeometricalDSSGreedySegmentationTest.eps", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results gave by another program nbok += ((r.size()==85)&&(n==10)&&(suml==94)) ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Saturated segmentation" ); { typedef SaturatedSegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveEPS("GeometricalDSSSaturatedSegmentationTest.eps", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results gave by another program nbok += ((r.size()==85)&&(n==25)&&(suml==255)) ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return (nbok == nb); }