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; 
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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);
}