voisinage.cpp 2.72 KB
Newer Older
Boris Cazic's avatar
Boris Cazic committed
1
2
3
4
#include"voisinage.h"
#include"reseau_cellule_etats.h"
#include<cmath>
#include<iostream>
Luning Yang's avatar
Luning Yang committed
5

6
7
8
9
10
11
12
13
14
15
void RegleVoisinageNeumann::setr(unsigned int r){
	if(r >= 0)
		rayon = r;
	else
		throw ("Rayon incorrect !\n");
}

void RegleVoisinageMoore::setr(unsigned int r){
	if(r >= 0)
		rayon = r;
16
17
	else
		throw ("Rayon incorrect !\n");
Luning Yang's avatar
Luning Yang committed
18
19
}

20
void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) const {
Maxime Goret's avatar
Maxime Goret committed
21
	v.voisinage = std::vector<Cellule*>();
Luning Yang's avatar
Luning Yang committed
22
	int nb = 0;
23
24
	unsigned int cellX = v.celluleCentre->abs;
	unsigned int cellY = v.celluleCentre->ord;
25
26
	unsigned int hauteur = r.getHauteur();
	unsigned int largeur = r.getLargeur();
Luning Yang's avatar
Luning Yang committed
27

28
29
30
	for (int i = -rayon; i <= rayon; i++)
		for (int j = -rayon; j <= rayon; j++)
			if (abs(i) + abs(j) <= rayon && i != 0 && j != 0)
31
				v.voisinage.push_back(&r.getReseau()[(cellY+i)%hauteur][(cellX+j)%largeur]);
Luning Yang's avatar
Luning Yang committed
32
33
}

34
void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r) const {
35
	v.voisinage = std::vector<Cellule*>();
Luning Yang's avatar
Luning Yang committed
36
	int nb = 0;
37
38
	unsigned int cellX = v.celluleCentre->abs;
	unsigned int cellY = v.celluleCentre->ord;
39
40
	unsigned int hauteur = r.getHauteur();
	unsigned int largeur = r.getLargeur();
Maxime Goret's avatar
Maxime Goret committed
41

42
43
44
	for (int i = -rayon; i <= rayon; i++)
		for (int j = -rayon; j <= rayon; j++)
			if (abs(i) <= rayon && abs(j) <= rayon && i != 0 && j != 0)
45
				v.voisinage.push_back(&r.getReseau()[(cellY+i)%hauteur][(cellX+j)%largeur]);
Luning Yang's avatar
Luning Yang committed
46
47
48
}

Voisinage::~Voisinage() {
49
	voisinage.clear();
Maxime Goret's avatar
Maxime Goret committed
50
}
51

52
void RegleVoisinageArbitraire::calculVoisinage(Voisinage &v, const Reseau& r) const { //définir get?
Maxime Goret's avatar
Maxime Goret committed
53
	v.voisinage = std::vector<Cellule*>();
54
55
56
57
58
59
	
	unsigned int abs = v.celluleCentre->abs;
	unsigned int ord = v.celluleCentre->ord;
	unsigned int hauteur = r.getHauteur();
	unsigned int largeur = r.getLargeur();

Luning Yang's avatar
Luning Yang committed
60
	for (int nb = 0; nb < coordonnees.size(); nb++){
61
		v.voisinage[nb] = &r.getReseau()[abs - coordonnees[nb].x] [ord - coordonnees[nb].y];
62
63
64
	}
}

65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//Coordonnees RegleVoisinageArbitraire::getVoisinage(const Reseau& r) {
//	
//	vector<Coordonnees> coordonnees;
//
//	Cellule* cellulecentre = celluleCentre;
//	
//
//	for (int k = 0; k < nbVoisin; k++) {
//		unsigned int i, j;
//		while (i >= r.getHauteur() || j >= r.getLargeur()) {
//			cout << "Entrez l'abscisse de la" << k << "ieme cellule.\n";
//			cin >> i;
//			cout << "Entrez l'ordonnee de la " << k << "ieme cellule.\n";
//			cin >> j;
//			if (i >= r.getHauteur() || j >= r.getLargeur())
//				cout << "Coordonnees incorrectes !\n";
//		}
//		if (i < r.getHauteur() && j < r.getLargeur()) {
//			coordonnees[k].x = cellulecentre->abs - i;
//			coordonnees[k].y = cellulecentre->ord - j;
//		}
//	}
//
//	return coordonnees;
//	// While (!utilisateur clique sur bouton valider){
//		//recuprer abs et ord de Cellule slectionne;
//		//rentrer la diffrence des coordonnes dans le vecteur co
//	//}
//
//}