simplify regular grid generation

This commit is contained in:
Samuel Hornus 2011-05-01 21:31:13 +00:00
parent 35c988118c
commit df420d1a04
1 changed files with 9 additions and 19 deletions

View File

@ -14,42 +14,32 @@ public:
typedef std::vector<FT> FTVec;
typedef std::vector<FTVec> PVec; // array of point coordinates
void operator()(const int D, const int N, PVec & g, bool last = true) const
void operator()(const int D, const int N, PVec & g) const
{ // create N^D grid
if( 0 == D )
if( 0 >= D )
{
g.push_back(FTVec());
return;
}
PVec h;
(*this)(D - 1, N, h, false);
(*this)(D - 1, N, h);
g.clear();
typename PVec::iterator hit = h.begin();
while( hit != h.end() )
{
hit->push_back(FT(0)); ++hit;
hit->push_back(FT(0));
++hit;
}
for( int i = 1; i <= N; ++i )
{
g.insert(g.end(), h.begin(), h.end());
for( int i = 1; i < N; ++i )
{
hit = h.begin();
while( hit != h.end() )
{
if( i == 0 )
hit->push_back(FT(i));
else
{
if( ! last )
(*hit)[D-1] = FT(i);
else if( D >= 3 )
(*hit)[D-1] = FT(i) ;//+ (*hit)[D-3] - (*hit)[D-2];
else if( D == 2 )
(*hit)[D-1] = FT(i) ;//- (*hit)[D-2];
else // D == 1
(*hit)[D-1] = FT(i);
}
++hit;
}
g.insert(g.end(), h.begin(), h.end());
}
}
};