Graph coloring
This commit is contained in:
parent
847964fd1e
commit
e43d23a5ea
|
@ -3,48 +3,70 @@
|
|||
|
||||
using namespace gti320;
|
||||
|
||||
void GraphColoring::color(ParticleSystem& particleSystem)
|
||||
{
|
||||
void GraphColoring::color(ParticleSystem &particleSystem) {
|
||||
// La palette de couleurs
|
||||
ColorList C;
|
||||
|
||||
std::vector<Particle>& particles = particleSystem.getParticles();
|
||||
std::vector<Particle> &particles = particleSystem.getParticles();
|
||||
std::vector<Spring> &springs = particleSystem.getSprings();
|
||||
|
||||
// Initialiser toutes les particules avec color = -1
|
||||
for (Particle& p : particles)
|
||||
{
|
||||
for (Particle &p: particles) {
|
||||
p.color = -1;
|
||||
}
|
||||
|
||||
// TODO Calculer les couleurs de toutes les particules du système.
|
||||
// TODO Calculer les couleurs de toutes les particules du syst<EFBFBD>me.
|
||||
// Boucler sur chaque particule et appeler la fonction findColor.
|
||||
|
||||
// TODO Construire les partitions qui correspond à chaque couleur.
|
||||
// Les partitions sont représentées par un tableau d'indices de particules, un pour chaque couleur.
|
||||
// TODO Construire les partitions qui correspond <EFBFBD> chaque couleur.
|
||||
// Les partitions sont repr<EFBFBD>sent<EFBFBD>es par un tableau d'indices de particules, un pour chaque couleur.
|
||||
// Stocker les partitions dans m_partitions.
|
||||
|
||||
int i = 0;
|
||||
for (Particle &p: particles) {
|
||||
int color = findColor(p, particles, springs, C);
|
||||
p.color = color;
|
||||
|
||||
if (m_partitions.size() <= color) {
|
||||
m_partitions.push_back(std::vector<int>());
|
||||
}
|
||||
m_partitions[color].push_back(i);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int GraphColoring::findColor(const Particle& p, const std::vector<Particle>& particles, const std::vector<Spring>& springs, ColorList& C) const
|
||||
{
|
||||
// TODO Trouver la première couleur de la palette C qui n'est pas attribuée à une particule voisine.
|
||||
// Si une couleur est introuvable, ajouter une nouvelle couleur à la palette et retournez la couleur.
|
||||
// Utiliser la fonction findNeighbors pour assembler une liste de particules qui sont directement connectées à la particule p par un ressort (les voisines).
|
||||
int
|
||||
GraphColoring::findColor(const Particle &p, const std::vector<Particle> &particles, const std::vector<Spring> &springs,
|
||||
ColorList &C) const {
|
||||
size_t n = C.size();
|
||||
auto count = new int[n];
|
||||
|
||||
return -1;
|
||||
// TODO Trouver la premi<6D>re couleur de la palette C qui n'est pas attribu<62>e <20> une particule voisine.
|
||||
// Si une couleur est introuvable, ajouter une nouvelle couleur <20> la palette et retournez la couleur.
|
||||
// Utiliser la fonction findNeighbors pour assembler une liste de particules qui sont directement connect<63>es <20> la particule p par un ressort (les voisines).
|
||||
|
||||
NeighborList neighbors = findNeighbors(p, particles, springs);
|
||||
for (auto const &neighbor: neighbors) {
|
||||
count[neighbor->color]++;
|
||||
}
|
||||
|
||||
for (int c = 0; c < n; c++) {
|
||||
if (count[c] == 0) {
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
NeighborList GraphColoring::findNeighbors(const Particle& p, const std::vector<Particle>& particles, const std::vector<Spring>& springs) const
|
||||
{
|
||||
NeighborList GraphColoring::findNeighbors(const Particle &p, const std::vector<Particle> &particles,
|
||||
const std::vector<Spring> &springs) const {
|
||||
NeighborList N;
|
||||
|
||||
for (const Spring& s : springs)
|
||||
{
|
||||
if (&particles[s.index0] == &p)
|
||||
{
|
||||
for (const Spring &s: springs) {
|
||||
if (&particles[s.index0] == &p) {
|
||||
N.push_back(&particles[s.index1]);
|
||||
}
|
||||
else if (&particles[s.index1] == &p)
|
||||
{
|
||||
} else if (&particles[s.index1] == &p) {
|
||||
N.push_back(&particles[s.index0]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace gti320
|
|||
Vector2f x; // position
|
||||
Vector2f v; // vélocité
|
||||
Vector2f f; // force
|
||||
int color; // coleur de particule
|
||||
int color; // couleur de particule
|
||||
|
||||
Particle(const Vector2f& _x, const Vector2f& _v, const Vector2f& _f, float _m)
|
||||
: fixed(false), m(_m), x(_x), v(_v), f(_f), color(-1)
|
||||
|
|
Loading…
Reference in New Issue