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 :
class RegleVoisinageNeumann : public RegleVoisinage {
public:
void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r);
//void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon);
};
class RegleVoisinageMoore : public RegleVoisinage {
public:
void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r);
//void setNbVoisins(unsigned int r);
void calculVoisinage(Voisinage& v, const Reseau& r, const unsigned int rayon);
};
......
......@@ -17,23 +17,23 @@ void RegleVoisinage::setNbVoisins(unsigned int r) {
}
}
void RegleVoisinageNeumann::setNbVoisins(unsigned int r) {
if (r == 1) { // voisinage de von Neumann
nbVoisin = 4;
}
else { // voisiange de von Neumann avec un rayon
nbVoisin = 2 * r * (1 + r);
}
//void RegleVoisinageNeumann::setNbVoisins(unsigned int r) {
// if (r == 1) { // voisinage de von Neumann
// nbVoisin = 4;
// }
// else { // voisiange de von Neumann avec un rayon
//nbVoisin = 2 * r * (1 + r);
//}
}
void RegleVoisinageMoore::setNbVoisins(unsigned int r) {
if (r == 1) { // voisinage de Moore
nbVoisin = 8;
}
else { // voisiange de Moore avec un rayon
nbVoisin = pow((2 * r + 1), 2) - 1;
}
}
//void RegleVoisinageMoore::setNbVoisins(unsigned int r) {
// if (r == 1) { // voisinage de Moore
// nbVoisin = 8;
//}
//else { // voisiange de Moore avec un rayon
// nbVoisin = pow((2 * r + 1), 2) - 1;
//}
//}
void RegleVoisinage::calculVoisinage(Voisinage& v, const Reseau& r) {
v.voisinage = std::vector<Cellule*>();
......@@ -52,7 +52,7 @@ 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*>();
int nb = 0;
unsigned int abs = v.celluleCentre->abs;
......@@ -60,6 +60,14 @@ void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) {
unsigned int hauteur = r.getHauteur();
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 j = 0; j < v.r; j++) {
if ((i + j) <= v.r || (i + j) != 0) {
......@@ -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*>();
int nb = 0;
unsigned int abs = v.celluleCentre->abs;
......@@ -123,6 +131,14 @@ void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r){
unsigned int hauteur = r.getHauteur();
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 j = 1; j <= i; j++) {
v.voisinage[nb] = &r.getReseau()[(abs + i) % hauteur][(ord + j) % largeur];
......
Supports Markdown
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