本文整理汇总了C++中KSpace::sKCoords方法的典型用法代码示例。如果您正苦于以下问题:C++ KSpace::sKCoords方法的具体用法?C++ KSpace::sKCoords怎么用?C++ KSpace::sKCoords使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KSpace
的用法示例。
在下文中一共展示了KSpace::sKCoords方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testUmbrellaComputer
bool testUmbrellaComputer()
{
using namespace Z3i;
typedef Space::RealPoint RealPoint;
typedef ImplicitBall<Space> EuclideanShape;
typedef GaussDigitizer<Space,EuclideanShape> DigitalShape;
typedef GaussDigitizer<Space,EuclideanShape>::Domain Domain;
typedef LightImplicitDigitalSurface<KSpace,DigitalShape> Boundary;
typedef Boundary::SurfelConstIterator ConstIterator;
//typedef Boundary::Tracker Tracker;
typedef Boundary::Surfel Surfel;
typedef Boundary::DigitalSurfaceTracker DigitalSurfaceTracker;
typedef DigitalSurface<Boundary> MyDigitalSurface;
typedef UmbrellaComputer<DigitalSurfaceTracker> MyUmbrellaComputer;
unsigned int nbok = 0;
unsigned int nb = 0;
trace.beginBlock ( "Testing block ... UmbrellaComputer" );
// Creating shape
Point c( 0, 0, 0 );
EuclideanShape ball( c, 2 ); // ball r=4
DigitalShape shape;
shape.attach( ball );
shape.init( RealPoint( -10.0, -10.0, -10.0 ),
RealPoint( 10.0, 10.0, 10.0 ), 1.0 );
// Creating cellular grid space around.
Domain domain = shape.getDomain();
KSpace K;
nbok += K.init( domain.lowerBound(), domain.upperBound(), true ) ? 1 : 0;
nb++;
trace.info() << "(" << nbok << "/" << nb << ") "
<< "K.init() is ok" << std::endl;
// Find start surfel on surface.
Surfel bel = Surfaces<KSpace>::findABel( K, shape, 10000 );
// Define surface container then surface itself.
Boundary boundary( K, // cellular space
shape, // point predicate
SurfelAdjacency<KSpace::dimension>( true ), // adjacency
bel // starting surfel
);
MyDigitalSurface digSurf( boundary ); // boundary is cloned
// Get tracker on surface.
DigitalSurfaceTracker* ptrTracker = boundary.newTracker( bel );
MyUmbrellaComputer umbrella;
KSpace::DirIterator dirIt = K.sDirs( bel );
Dimension k = *dirIt;
Dimension j = *(++dirIt);
trace.beginBlock ( "Testing block ... forward umbrella" );
umbrella.init( *ptrTracker, k, true, j );
unsigned int nb_forward = 0;
Surfel init_bel = bel;
do {
Point x = K.sKCoords( bel );
trace.info() << x << std::endl;
umbrella.next();
++nb_forward;
bel = umbrella.surfel();
} while ( bel != init_bel );
trace.endBlock();
trace.beginBlock ( "Testing block ... backward umbrella" );
unsigned int nb_backward = 0;
do {
Point x = K.sKCoords( bel );
trace.info() << x << std::endl;
umbrella.previous();
++nb_backward;
bel = umbrella.surfel();
} while ( bel != init_bel );
nb++, nbok += nb_forward == nb_backward ? 1 : 0;
trace.info() << "(" << nbok << "/" << nb << ") "
<< " nb_forward(" << nb_forward
<< ") == nb_backward(" << nb_backward << ")"
<< std::endl;
trace.endBlock();
unsigned int nbsurfels = 0;
for ( ConstIterator it = boundary.begin(), it_end = boundary.end();
it != it_end; ++it )
{
++nbsurfels;
}
trace.info() << nbsurfels << " surfels found." << std::endl;
trace.endBlock();
delete ptrTracker;
return nbok == nb;
}
示例2: main
//.........这里部分代码省略.........
{
Surfel s = *it_layer;
processedVertices.insert( s );
if ( v2plane.find( s ) == v2plane.end() )
v2plane[ s ] = ptrRoundPlane;
}
}
// Assign random color for each plane.
ptrRoundPlane->second = Color( rand() % 192 + 64, rand() % 192 + 64, rand() % 192 + 64, 255 );
}
trace.endBlock();
//! [polyhedralizer-segment]
//! [polyhedralizer-lsf]
for ( vector<RoundPlane*>::iterator
it = roundPlanes.begin(), itE = roundPlanes.end();
it != itE; ++it )
{
NaivePlaneComputer& computer = (*it)->first;
RealVector normal;
double mu = LSF( normal, computer.begin(), computer.end() );
(*it)->third = make_pair( normal, mu );
}
//! [polyhedralizer-lsf]
//! [polyhedralizer-projection]
map<Surfel, RealPoint> coordinates;
for ( map<Surfel,RoundPlane*>::const_iterator
it = v2plane.begin(), itE = v2plane.end();
it != itE; ++it )
{
Surfel v = it->first;
RoundPlane* rplane = it->second;
Point p = ks.sKCoords( v );
RealPoint rp( (double)p[ 0 ]/2.0, (double)p[ 1 ]/2.0, (double)p[ 2 ]/2.0 );
double mu = rplane->third.second;
RealVector normal = rplane->third.first;
double lambda = mu - rp.dot( normal );
coordinates[ v ] = rp + lambda*normal;
}
typedef vector<Surfel> SurfelRange;
map<Surfel, RealPoint> new_coordinates;
for ( ConstIterator it = digSurf.begin(), itE= digSurf.end(); it != itE; ++it )
{
Surfel s = *it;
SurfelRange neighbors;
back_insert_iterator<SurfelRange> writeIt = back_inserter( neighbors );
digSurf.writeNeighbors( writeIt, *it );
RealPoint x = RealPoint::zero;
for ( SurfelRange::const_iterator its = neighbors.begin(), itsE = neighbors.end();
its != itsE; ++its )
x += coordinates[ *its ];
new_coordinates[ s ] = x / neighbors.size();
}
//! [polyhedralizer-projection]
//! [polyhedralizer-MakeMesh]
typedef unsigned int Number;
typedef Mesh<RealPoint> MyMesh;
typedef MyMesh::MeshFace MeshFace;
typedef MyDigitalSurface::FaceSet FaceSet;
typedef MyDigitalSurface::VertexRange VertexRange;
map<Surfel, Number> index; // Numbers all vertices.
Number nbv = 0;
MyMesh polyhedron( true );
// Insert all projected surfels as vertices of the polyhedral surface.
示例3: testCombinatorialSurface
bool testCombinatorialSurface()
{
using namespace Z3i;
typedef Space::RealPoint RealPoint;
typedef ImplicitBall<Space> EuclideanShape;
typedef GaussDigitizer<Space,EuclideanShape> DigitalShape;
typedef GaussDigitizer<Space,EuclideanShape>::Domain Domain;
typedef LightImplicitDigitalSurface<KSpace,DigitalShape> Boundary;
typedef Boundary::SurfelConstIterator ConstIterator;
//typedef Boundary::Tracker Tracker;
typedef Boundary::Surfel Surfel;
//typedef Boundary::DigitalSurfaceTracker DigitalSurfaceTracker;
typedef DigitalSurface<Boundary> MyDigitalSurface;
//typedef UmbrellaComputer<DigitalSurfaceTracker> MyUmbrellaComputer;
typedef DigitalSurface<Boundary>::Face Face;
typedef DigitalSurface<Boundary>::Arc Arc;
typedef DigitalSurface<Boundary>::Vertex Vertex;
unsigned int nbok = 0;
unsigned int nb = 0;
trace.beginBlock ( "Testing block ... Combinatorial surface" );
// Creating shape
Point c( 0, 0, 0 );
EuclideanShape ball( c, 8 ); // ball r=4
DigitalShape shape;
shape.attach( ball );
shape.init( RealPoint( -2.0, -3.0, -10.0 ),
RealPoint( 10.0, 10.0, 10.0 ), 1.0 );
// Creating cellular grid space around.
Domain domain = shape.getDomain();
KSpace K;
nbok += K.init( domain.lowerBound(), domain.upperBound(), true ) ? 1 : 0;
nb++;
trace.info() << "(" << nbok << "/" << nb << ") "
<< "K.init() is ok" << std::endl;
// Find start surfel on surface.
Surfel bel = Surfaces<KSpace>::findABel( K, shape, 10000 );
// Define surface container then surface itself.
Boundary boundary( K, // cellular space
shape, // point predicate
SurfelAdjacency<KSpace::dimension>( true ), // adjacency
bel // starting surfel
);
MyDigitalSurface digSurf( boundary ); // boundary is cloned
trace.beginBlock ( "Testing block ... Digital surface faces." );
MyDigitalSurface::FaceSet all_faces = digSurf.allFaces();
for ( MyDigitalSurface::FaceSet::const_iterator it = all_faces.begin(),
it_end = all_faces.end(); it != it_end; ++it )
{
std::cerr << " face=" << K.sKCoords( digSurf.pivot( *it ) ) << ":";
std::cerr << "(" << it->nbVertices << ")" << (it->isClosed() ? "C": "O");
MyDigitalSurface::VertexRange vtx = digSurf.verticesAroundFace( *it );
for ( unsigned int i = 0; i < vtx.size(); ++i )
{
std::cerr << " " << K.sKCoords( vtx[ i ] );
}
std::cerr << std::endl;
}
trace.endBlock();
// Checks that vertices of a face are in the same order as the
// incident arcs.
trace.beginBlock( "Testing block ...Check order faces/arcs" );
unsigned int nbvtcs = 0;
unsigned int nbarcs = 0;
unsigned int nbfaces = 0;
for ( ConstIterator it = boundary.begin(), it_end = boundary.end();
it != it_end; ++it, ++nbvtcs )
{
const Vertex & vtx = *it;
MyDigitalSurface::ArcRange arcs = digSurf.outArcs( vtx );
for ( unsigned int i = 0; i < arcs.size(); ++i, ++nbarcs )
{
const Arc & arc = arcs[ i ];
MyDigitalSurface::FaceRange
faces = digSurf.facesAroundArc( arc );
for ( unsigned int j = 0; j < faces.size(); ++j, ++nbfaces )
{
const Face & face = faces[ j ];
// search vertex in face.
MyDigitalSurface::VertexRange
vertices = digSurf.verticesAroundFace( face );
unsigned int k = 0;
while ( ( k < vertices.size() ) && ( vertices[ k ] != vtx ) )
++k;
++nb;
if ( k == vertices.size() )
trace.info() << "Error at vertex " << vtx
<< ". Vertex not found in incident face."
<< std::endl;
else ++nbok;
++nb;
if ( digSurf.head( arc ) != vertices[ (k+1) % vertices.size() ] )
trace.info() << "Error at vertex " << vtx
<< ". Arc is not in incident face."
<< std::endl;
else ++nbok;
//.........这里部分代码省略.........