voisinage.cpp 2.57 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

Luning Yang's avatar
Luning Yang committed
6
void Voisinage::setr(unsigned int rayon){
7
8
9
10
	if(rayon >= 0)
		r = rayon;
	else
		throw ("Rayon incorrect !\n");
Luning Yang's avatar
Luning Yang committed
11
12
}

13
void RegleVoisinageNeumann::calculVoisinage(Voisinage& v, const Reseau& r) {
Maxime Goret's avatar
Maxime Goret committed
14
	v.voisinage = std::vector<Cellule*>();
Luning Yang's avatar
Luning Yang committed
15
	int nb = 0;
16
17
	unsigned int cellX = v.celluleCentre->abs;
	unsigned int cellY = v.celluleCentre->ord;
18
19
	unsigned int hauteur = r.getHauteur();
	unsigned int largeur = r.getLargeur();
Luning Yang's avatar
Luning Yang committed
20

21
22
23
	for (int i = -v.r; i <= v.r; i++)
		for (int j = -v.r; j <= v.r; j++)
			if (abs(i) + abs(j) <= v.r && i != 0 && j != 0)
24
				v.voisinage.push_back(&r.getReseau()[(cellY+i)%hauteur][(cellX+j)%largeur]);
Luning Yang's avatar
Luning Yang committed
25
26
}

27
28
void RegleVoisinageMoore::calculVoisinage(Voisinage& v, const Reseau& r) {
	v.voisinage = std::vector<Cellule*>();
Luning Yang's avatar
Luning Yang committed
29
	int nb = 0;
30
31
	unsigned int cellX = v.celluleCentre->abs;
	unsigned int cellY = v.celluleCentre->ord;
32
33
	unsigned int hauteur = r.getHauteur();
	unsigned int largeur = r.getLargeur();
Maxime Goret's avatar
Maxime Goret committed
34

35
36
37
	for (int i = -v.r; i <= v.r; i++)
		for (int j = -v.r; j <= v.r; j++)
			if (abs(i) <= v.r && abs(j) <= v.r && i != 0 && j != 0)
38
				v.voisinage.push_back(&r.getReseau()[(cellY+i)%hauteur][(cellX+j)%largeur]);
Luning Yang's avatar
Luning Yang committed
39
40
41
}

Voisinage::~Voisinage() {
42
	voisinage.clear();
Maxime Goret's avatar
Maxime Goret committed
43
}
44

45
void RegleVoisinageArbitraire::calculVoisinage(Voisinage &v, const Reseau& r) const { //définir get?
Maxime Goret's avatar
Maxime Goret committed
46
	v.voisinage = std::vector<Cellule*>();
47
48
49
50
51
52
	
	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
53
	for (int nb = 0; nb < coordonnees.size(); nb++){
54
		v.voisinage[nb] = &r.getReseau()[abs - coordonnees[nb].x] [ord - coordonnees[nb].y];
55
56
57
	}
}

58
59
60
61
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
//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
//	//}
//
//}