#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/base/IteratorCirculatorTraits.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/geometry/tools/Hull2DHelpers.h"
#include "DGtal/geometry/tools/PolarPointComparatorBy2x2DetComputer.h"
#include "DGtal/geometry/tools/determinant/AvnaimEtAl2x2DetSignComputer.h"
#include "DGtal/geometry/tools/determinant/InHalfPlaneBySimple3x3Matrix.h"
#include "DGtal/shapes/ShapeFactory.h"
#include "DGtal/shapes/Shapes.h"
#include "DGtal/topology/DigitalSetBoundary.h"
#include "DGtal/topology/DigitalSurface.h"
#include "DGtal/graph/DepthFirstVisitor.h"
#include "DGtal/io/boards/Board2D.h"
using namespace std;
template <typename ForwardIterator, typename Board>
void drawPolygon(
const ForwardIterator& itb,
const ForwardIterator& ite,
Board& aBoard, bool isClosed = true)
{
ForwardIterator it = itb;
if (it != ite)
{
aBoard <<
SetMode( p.className(),
"Grid" )
<< p
for (++it; it != ite; ++it, prev = p)
{
p = *it;
aBoard << p;
if (prev != p)
aBoard.drawArrow(prev[0], prev[1], p[0], p[1]);
}
if (isClosed)
{
if (prev != p1)
aBoard.drawArrow(prev[0], prev[1], p1[0], p1[1]);
}
}
}
{
using namespace functions::Hull2D;
{
vector<Z2i::Point> res;
StrictPredicate predicate( functor );
trace.
info() <<
" ConvexHull HV thickness: " << th << std::endl;
board.
drawCircle( antipodalS[0], antipodalS[1], 0.2) ;
board.
drawCircle(antipodalP[0], antipodalP[1], 0.2);
board.
drawCircle(antipodalQ[0], antipodalQ[1], 0.2);
board.
drawLine(antipodalP[0], antipodalP[1], antipodalQ[0], antipodalQ[1]);
board.
saveSVG(
"ConvexHullCCW.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"ConvexHullCCW.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> res;
LargePredicate predicate( functor );
board.
saveSVG(
"ConvexHullCCWWithPointsOnEdges.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"ConvexHullCCWWithPointsOnEdges.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> res;
StrictPredicate predicate( functor );
board.
saveSVG(
"ConvexHullCW.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"ConvexHullCW.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> res;
StrictPredicate predicate( functor );
board.
saveSVG(
"ConvexHullCCWbis.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"ConvexHullCCWbis.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> polygonalLine;
vector<Z2i::Point> resGraham, res;
StrictPredicate predicate( functor );
for (std::vector<Z2i::Point>::const_iterator
it = polygonalLine.begin(),
itEnd = polygonalLine.end();
it != itEnd; ++it)
drawPolygon( polygonalLine.begin(), polygonalLine.end(), board,
true );
board.
saveSVG(
"SimplePolygonalLine.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"SimplePolygonalLine.png", Board2D::CairoPNG);
#endif
drawPolygon( resGraham.begin(), resGraham.end(), board );
board.
saveSVG(
"SimplePolygonalLineGraham.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"SimplePolygonalLineGraham.png", Board2D::CairoPNG);
#endif
board.
saveSVG(
"SimplePolygonalLineMelkman.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"SimplePolygonalLineMelkman.png", Board2D::CairoPNG);
#endif
board.
saveSVG(
"SimplePolygonalLineMelkman2.svg" );
#ifdef WITH_CAIRO
board.
saveCairo(
"SimplePolygonalLineMelkman2.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> res;
std::copy( pointSet.begin(), pointSet.end(), back_inserter( res ) );
std::sort( res.begin(), res.end() );
#ifdef WITH_CAIRO
board.
saveCairo(
"AndrewWEVP.png", Board2D::CairoPNG);
#endif
}
{
vector<Z2i::Point> res;
std::copy( pointSet.begin(), pointSet.end(), back_inserter( res ) );
std::vector<Z2i::Point>::iterator itMax
= std::max_element( res.begin(), res.end() );
std::sort( res.begin(), res.end(), comparator );
#ifdef WITH_CAIRO
board.
saveCairo(
"GrahamWEVP.png", Board2D::CairoPNG);
#endif
}
}
int main(
int argc,
char** argv )
{
for ( int i = 0; i < argc; ++i )
return 0;
}