Commit 715ae88c authored by Maxime Goret's avatar Maxime Goret
Browse files

Modif Rayon Voisinage

parent 84f73df5
Pipeline #79236 canceled with stage
...@@ -81,16 +81,16 @@ public : ...@@ -81,16 +81,16 @@ public :
class RegleVoisinageNeumann : public RegleVoisinage { class RegleVoisinageNeumann : public RegleVoisinage {
public: public:
void setNbVoisins(unsigned int r); //void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r); void calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon);
}; };
class RegleVoisinageMoore : public RegleVoisinage { class RegleVoisinageMoore : public RegleVoisinage {
public: public:
void setNbVoisins(unsigned int r); //void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r); void calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon);
}; };
......
...@@ -17,23 +17,23 @@ void RegleVoisinage::setNbVoisins(unsigned int r) { ...@@ -17,23 +17,23 @@ void RegleVoisinage::setNbVoisins(unsigned int r) {
} }
} }
void RegleVoisinageNeumann::setNbVoisins(unsigned int r) { //void RegleVoisinageNeumann::setNbVoisins(unsigned int r) {
if (r == 1) { // voisinage de von Neumann // if (r == 1) { // voisinage de von Neumann
nbVoisin = 4; // nbVoisin = 4;
} // }
else { // voisiange de von Neumann avec un rayon // else { // voisiange de von Neumann avec un rayon
nbVoisin = 2 * r * (1 + r); //nbVoisin = 2 * r * (1 + r);
} //}
} }
void RegleVoisinageMoore::setNbVoisins(unsigned int r) { //void RegleVoisinageMoore::setNbVoisins(unsigned int r) {
if (r == 1) { // voisinage de Moore // if (r == 1) { // voisinage de Moore
nbVoisin = 8; // nbVoisin = 8;
} //}
else { // voisiange de Moore avec un rayon //else { // voisiange de Moore avec un rayon
nbVoisin = pow((2 * r + 1), 2) - 1; // nbVoisin = pow((2 * r + 1), 2) - 1;
} //}
} //}
void RegleVoisinage::calculVoisinage(Voisinage& v, const Reseau& r) { void RegleVoisinage::calculVoisinage(Voisinage& v, const Reseau& r) {
v.voisinage = std::vector<Cellule*>(); v.voisinage = std::vector<Cellule*>();
...@@ -52,13 +52,21 @@ void RegleVoisinage::calculVoisinage(Voisinage& v, const Reseau& r) { ...@@ -52,13 +52,21 @@ void RegleVoisinage::calculVoisinage(Voisinage& v, const Reseau& r) {
} }
} }
void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) { void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon) {
v.voisinage = std::vector<Cellule*>(); v.voisinage = std::vector<Cellule*>();
int nb = 0; int nb = 0;
unsigned int abs = v.celluleCentre->abs; unsigned int abs = v.celluleCentre->abs;
unsigned int ord = v.celluleCentre->ord; unsigned int ord = v.celluleCentre->ord;
unsigned int hauteur = r.getHauteur(); unsigned int hauteur = r.getHauteur();
unsigned int largeur = r.getLargeur(); unsigned int largeur = r.getLargeur();
if (rayon == 1) { // voisinage de von Neumann
nbVoisin = 4;
}
else { // voisiange de von Neumann avec un rayon
nbVoisin = 2 * r * (1 + r);
}
for (int i = 0; i < v.r; i++) { for (int i = 0; i < v.r; i++) {
for (int j = 0; j < v.r; j++) { for (int j = 0; j < v.r; j++) {
...@@ -115,7 +123,7 @@ void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) { ...@@ -115,7 +123,7 @@ void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) {
} }
} }
void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r){ void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon){
v.voisinage = std::vector<Cellule*>(); v.voisinage = std::vector<Cellule*>();
int nb = 0; int nb = 0;
unsigned int abs = v.celluleCentre->abs; unsigned int abs = v.celluleCentre->abs;
...@@ -123,6 +131,14 @@ void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r){ ...@@ -123,6 +131,14 @@ void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r){
unsigned int hauteur = r.getHauteur(); unsigned int hauteur = r.getHauteur();
unsigned int largeur = r.getLargeur(); unsigned int largeur = r.getLargeur();
if (rayon == 1) { // voisinage de Moore
nbVoisin = 8;
}
else { // voisiange de Moore avec un rayon
nbVoisin = pow((2 * r + 1), 2) - 1;
}
for (int i = 1; i <= v.r; i++) { for (int i = 1; i <= v.r; i++) {
for (int j = 1; j <= i; j++) { for (int j = 1; j <= i; j++) {
v.voisinage[nb] = &r.getReseau()[(abs + i) % hauteur][(ord + j) % largeur]; v.voisinage[nb] = &r.getReseau()[(abs + i) % hauteur][(ord + j) % largeur];
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment