diff --git a/include/Algo/Geometry/voronoiDiagrams.hpp b/include/Algo/Geometry/voronoiDiagrams.hpp index 5f5d58378038d635ed43d56eb5c860354b7ee4b5..1ba6574392fce487d2fa0a531828d91c74eacafe 100644 --- a/include/Algo/Geometry/voronoiDiagrams.hpp +++ b/include/Algo/Geometry/voronoiDiagrams.hpp @@ -140,7 +140,7 @@ void VoronoiDiagram::computeDiagram () template void VoronoiDiagram::computeDistancesWithinRegion (Dart seed) -{ // TODO : this algo has not yet been tested +{ // init front.clear(); vmReached.unmarkAll(); @@ -257,31 +257,6 @@ unsigned int CentroidalVoronoiDiagram::moveSeedsOneEdgeNoCheck(){ return m; } -template -unsigned int CentroidalVoronoiDiagram::moveSeedsOneEdgeCheck(){ - // TODO : probable bug (memoire ?) car les iterations ralentissent inexplicablement - unsigned int m = 0; - for (unsigned int i = 0; i < this->seeds.size(); i++) - { - Dart oldSeed = this->seeds[i]; - Dart newSeed = selectBestNeighborFromSeed(i); - - // move the seed - if (newSeed != oldSeed) - { - REAL regionEnergy = distances[oldSeed]; - this->computeDistancesWithinRegion(newSeed); - cumulateEnergyFromRoot(newSeed); - if (distances[newSeed] < regionEnergy) - { - this->seeds[i] = newSeed; - m++; - } - } - } - return m; -} -/* template unsigned int CentroidalVoronoiDiagram::moveSeedsOneEdgeCheck(){ // TODO : probable bug (memoire ?) car les iterations ralentissent inexplicablement @@ -301,34 +276,42 @@ unsigned int CentroidalVoronoiDiagram::moveSeedsOneEdgeCheck(){ if (distances[newSeed] < regionEnergy) m++; else - this->seeds[i] = newSeed; + this->seeds[i] = oldSeed; } } return m; } -*/ + template unsigned int CentroidalVoronoiDiagram::moveSeedsToMedioid(){ unsigned int m = 0; -/* for (unsigned int i = 0; i < this->seeds.size(); i++) + for (unsigned int i = 0; i < this->seeds.size(); i++) { - Dart oldSeed = this->seeds[i]; - Dart newSeed = selectBestNeighborFromSeed(i); + Dart oldSeed, newSeed; unsigned int seedMoved = 0; - REAL regionEnergy = distances[oldSeed]; + REAL regionEnergy; - // move the seed - while (newSeed != oldSeed) + do { - this->cumulateEnergyAndGradientFromSeed(numSeed); - cumulateEnergyFromRoot(newSeed); + oldSeed = this->seeds[i]; + regionEnergy = distances[oldSeed]; + + newSeed = selectBestNeighborFromSeed(i); + this->seeds[i] = newSeed; + this->computeDistancesWithinRegion(newSeed); + cumulateEnergyAndGradientFromSeed(i); if (distances[newSeed] < regionEnergy) + seedMoved = 1; + else { - this->seeds[i] = newSeed; - m++; + this->seeds[i] = oldSeed; + newSeed = oldSeed; } - } - } */ + + } while (newSeed != oldSeed); + + m += seedMoved; + } return m; }