#include <iostream>
#include <sstream>
#include "DGtal/base/Common.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/io/boards/Board2D.h"
#include "DGtal/geometry/curves/ArithmeticalDSL.h"
{
using namespace Z2i;
Point bottomLeft( 0, 0 );
Point firstPoint( bottomLeft[0], (line.
a()*bottomLeft[0]/line.
b()) );
Point lastPoint( topRight[0], (line.
a()*topRight[0]/line.
b()) );
it = line.
begin(firstPoint),
ite = line.
end(lastPoint);
it != ite; ++it )
{
board <<
SetMode( it->className(),
"Paving" )
<< *it;
}
#ifdef WITH_CAIRO
board.
saveCairo(
"NaiveDSL.png", Board2D::CairoPNG);
#endif
}
{
using namespace Z2i;
trace.
info() << line << line.negate();
Point bottomLeft( 0, 0 );
Point firstPoint( bottomLeft[0], (line.a()*bottomLeft[0]/line.b()) );
Point lastPoint( topRight[0], (line.a()*topRight[0]/line.b()) );
it = line.begin(firstPoint),
ite = line.end(lastPoint);
it != ite; ++it )
{
board <<
SetMode( it->className(),
"Paving" )
<< *it;
}
#ifdef WITH_CAIRO
board.
saveCairo(
"StandardDSL.png", Board2D::CairoPNG);
#endif
}
template<typename DSL>
typename DSL::Integer b,
unsigned short octant,
unsigned int n)
{
std::stringstream ssTitle;
ssTitle << " Arithmetical DSL "
<< "(" << a << ", " << b << ", 0)"
<< " in octant " << octant;
using namespace Z2i;
DSL line( a, b, 0 );
Vector v = line.steps().first;
Vector w = line.steps().second;
typename DSL::ConstIterator it;
it = line.begin(
Point(0,0) );
unsigned int c;
for (c = 0; c < n; ++it, ++c )
{
board <<
SetMode( p.className(),
"Paving" )
<< p;
}
Point topRight, bottomLeft;
if (b > 0)
{
if (a > 0)
{
bottomLeft = firstPoint;
topRight = lastPoint;
}
else
{
bottomLeft =
Point( firstPoint[0], lastPoint[1] );
topRight =
Point( lastPoint[0], firstPoint[1] );
}
}
else
{
if (a > 0)
{
bottomLeft =
Point( lastPoint[0], firstPoint[1] );
topRight =
Point( firstPoint[0], lastPoint[1] );
}
else
{
bottomLeft = lastPoint;
topRight = firstPoint;
}
}
it = line.begin(
Point(0,0) );
for (c = 0; c < n; ++c )
{
if ( line.remainder( p ) == line.mu() )
{
board.
drawArrow(p[0], p[1], p[0]+s[0], p[1]+s[1]);
}
++it;
if (c < (n-1))
{
if ( (q-p) == v )
else if ( (q-p) == w )
else
}
}
std::stringstream ssFileName;
ssFileName << "ArithmeticalDSL"
<< "-" << DSL::foregroundAdjacency
<< "-" << octant
<< "-" << a << "-" << b
<< ".png";
#ifdef WITH_CAIRO
board.
saveCairo(ssFileName.str().c_str(), Board2D::CairoPNG);
#endif
}
{
using namespace Z2i;
drawArithmeticalDSL<NaiveDSL<Integer> >( 0, 1, 0, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 5, 8, 0, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 1, 1, 1, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 8, 5, 1, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 1, 0, 2, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 8, -5, 2, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 1, -1, 3, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 5, -8, 3, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( 0, -1, 4, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -5, -8, 4, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -1, -1, 5, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -8, -5, 5, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -1, 0, 6, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -8, 5, 6, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -1, 1, 7, 15 );
drawArithmeticalDSL<NaiveDSL<Integer> >( -5, 8, 7, 15 );
drawArithmeticalDSL<StandardDSL<Integer> >( 0, 1, 0, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 5, 8, 0, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 1, 1, 1, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 8, 5, 1, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 1, 0, 2, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 8, -5, 2, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 1, -1, 3, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 5, -8, 3, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( 0, -1, 4, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -5, -8, 4, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -1, -1, 5, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -8, -5, 5, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -1, 0, 6, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -8, 5, 6, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -1, 1, 7, 21 );
drawArithmeticalDSL<StandardDSL<Integer> >( -5, 8, 7, 21 );
}
{
}
int main(
int argc,
char** argv )
{
for ( int i = 0; i < argc; ++i )
return 0;
}
Aim: This class aims at representing an iterator that provides a way to scan the points of a DSL....
ArithmeticalDSL negate() const
ConstIterator begin(const Point &aPoint) const
ConstIterator end(const Point &aPoint) const
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)....
Aim: This class is an alias of ArithmeticalDSS for naive DSL. It represents a naive digital straight ...
Aim: This class is an alias of ArithmeticalDSS for standard DSL. It represents a standard digital str...
void beginBlock(const std::string &keyword="")
Board & setPenColorRGBi(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=255)
void drawArrow(double x1, double y1, double x2, double y2, bool filled=true, int depthValue=-1)
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
void saveCairo(const char *filename, CairoType type=CairoPNG, PageSize size=Board::BoundingBox, double margin=10.0) const
void exampleStandardDSL()
Function that illustrates the basic usage of a standard DSL.
void exampleNaiveDSL()
Function that illustrates the basic usage of a naive DSL.
void exampleArithmeticalDSLTypes()
Function that creates a naive DSL with different types.
void exampleArithmeticalDSLOctant()
Function that draws the steps and the shift vector of a naive and a standard DSL in each octant.
void drawArithmeticalDSL(typename DSL::Integer a, typename DSL::Integer b, unsigned short octant, unsigned int n)
Function that draws the steps and the shift vector of a DSL of slope a / b and intercept 0.
DGtal is the top-level namespace which contains all DGtal functions and types.
Modifier class in a Board2D stream. Useful to choose your own mode for a given class....
FreemanChain< int >::Vector Vector
HyperRectDomain< Space > Domain