Commit a637651b authored by theray1's avatar theray1
Browse files

implementation du quadtree et structures de données nécessaires, intialisation...

implementation du quadtree et structures de données nécessaires, intialisation du plateau, coloriage, recherche
parent 6a75475b
......@@ -7,13 +7,17 @@ public class Case{
private boolean acquise;
private Couleur couleur;
public boolean estAcquise() {
return this.acquise;
}
public Case(int x, int y) {
this.ligne = y;
this.colonne = x;
public Case(int i, int j) {
this.ligne = i;
this.colonne = j;
this.acquise = false;
this.setCouleur(Couleur.A);
}
public boolean caseColoriee(){
......@@ -21,4 +25,12 @@ public class Case{
//TODO : retourner vrai si une case n'est pas blanche
}
public Couleur getCouleur() {
return couleur;
}
public void setCouleur(Couleur couleur) {
this.couleur = couleur;
}
}
\ No newline at end of file
package project;
public enum Couleur {
ROUGE,
BLEU
B,
R,
A
}
......@@ -7,5 +7,16 @@ import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
System.out.println("test");
Plateau plateau = new Plateau(24);
plateau.afficherPlateau();
Case temp = plateau.getArbrePlateau().rechercheCase(12,13);
plateau.colorierCase(temp, Couleur.B);
System.out.println(plateau.getArbrePlateau().rechercheCase(12,13));
plateau.afficherPlateau();
}
}
......@@ -16,9 +16,16 @@ public class PetiteRegion extends Region{
this.cases = cases;
}
public PetiteRegion(Case basGauche, Case hautDroite) {
public PetiteRegion(Case basGauche, Case hautDroite, Case[][] cases) {
super(basGauche, hautDroite);
// TODO Auto-generated constructor stub
this.cases = new Case[9];
this.cases[0] = basGauche;
for(int caseIterator = 1; caseIterator < 9; caseIterator ++) {
this.cases[caseIterator] = cases[basGauche.ligne + caseIterator/3][basGauche.colonne + caseIterator%3];
}
}
......
......@@ -11,9 +11,7 @@ public class Plateau {
public Plateau (int longueur){
this.longueur = longueur;
Quadtree arbPla = new Quadtree();
matrice = new Case[longueur][];
this.initalisationQuadtree();
this.initalisationQuadtreeEtMatrice();
}
public void RemplirRegion() {
......@@ -34,9 +32,22 @@ public class Plateau {
return 0;
}
public void initalisationQuadtree() {
Case[][] cases = new Case[longueur][];
public void initalisationQuadtreeEtMatrice() {
this.matrice = new Case[longueur][];
this.setArbrePlateau(new Quadtree());
//Initialisation de la matrice et de toutes les cases
for(int i = 0; i < longueur; i++) {
this.matrice[i] = new Case[longueur];//Le plateau est un carré, donc la longueur est égale à la hauteur
for (int j = 0; j < longueur; j++) {
this.matrice[i][j] = new Case(i,j);
}
}
//Initialisation du quadtree à partir de la matrice
this.arbrePlateau = new Quadtree();
this.arbrePlateau.intialiserDepuisMatrice(this.matrice);
}
public Case[] voisins(){
......@@ -70,5 +81,26 @@ public class Plateau {
}
}*/
}
public void colorierCase(Case c, Couleur couleur) {
c.setCouleur(couleur);
}
public void afficherPlateau() {
for(int i = 0; i < this.matrice.length; i++) {
for(int j = 0; j < this.matrice[i].length; j++) {
System.out.print(matrice[this.matrice.length - 1 - i][j].getCouleur());
}
System.out.println('\n');
}
}
public Quadtree getArbrePlateau() {
return arbrePlateau;
}
public void setArbrePlateau(Quadtree arbrePlateau) {
this.arbrePlateau = arbrePlateau;
}
}
......@@ -6,34 +6,23 @@ public class Quadtree {
public Quadtree() {
this.root = null;
}
public Quadtree(int longueur) {
//this.root.initalisationQuadtree(longueur, 0, 0);
public void intialiserDepuisMatrice(Case[][] cases) {
this.root = new QuadtreeNode();
this.root.initialiserDepuisMatrice(cases, cases.length, 0, 0);
}
public boolean estVide() {
return this.root == null;
}
public QuadtreeNode recherche(int longueur, Case caseRecherchée) {
Case caseBasGauche = new Case(0, 0);
return __recherche(longueur, caseRecherchée, caseBasGauche);
}
private QuadtreeNode __recherche(int longueur, Case caseRecherchée, Case caseBasGauche) {
//TODO : implementer la recherche dans le PR TREE
return root;
}
private Case rechercheCase(Case caseRecherchee) {
public Case rechercheCase(int iCaseRecherchee, int jCaseRecherchee) {
//TODO : recherche d'une case du plateau dans le quadtree
if(this.estVide()) {
return this.root.rechercheCase(caseRecherchee);
if(!this.estVide()) {
return this.root.rechercheCase(iCaseRecherchee,jCaseRecherchee);
} else {
//Impossible de trouvée la case
return null;
}
......
......@@ -21,42 +21,44 @@ public class QuadtreeNode {
}
public Case rechercheCase(Case caseRecherchee) {
//TODO : recherche d'une case du plateau dans le quadtree
public Case rechercheCase(int iCaseRecherchee, int jCaseRecherchee) {
//TODO : recherche d'une case du plateau dans le quadtree
if(this.estFeuille()) {
if (this.region.contient(caseRecherchee)) {
if (this.region.contient(iCaseRecherchee,jCaseRecherchee)) {
PetiteRegion pregion = (PetiteRegion) this.region;
Case[] cases = pregion.getCases();
int indice = 3*(caseRecherchee.ligne-pregion.getBasGauche().ligne) + caseRecherchee.colonne-pregion.getBasGauche().colonne;
int indice = 3*(iCaseRecherchee-pregion.getBasGauche().ligne) + jCaseRecherchee-pregion.getBasGauche().colonne;
return cases[indice];
}
} else {
if(!(v1==null)){
if(v1.region.contient(caseRecherchee)) {
return v1.rechercheCase(caseRecherchee);
if(v1.region.contient(iCaseRecherchee,jCaseRecherchee)) {
return v1.rechercheCase(iCaseRecherchee,jCaseRecherchee);
}
}
if(!(v2==null)){
if(v2.region.contient(caseRecherchee)) {
return v2.rechercheCase(caseRecherchee);
if(v2.region.contient(iCaseRecherchee,jCaseRecherchee)) {
return v2.rechercheCase(iCaseRecherchee,jCaseRecherchee);
}
}
if(!(v3==null)){
if(v3.region.contient(caseRecherchee)) {
return v3.rechercheCase(caseRecherchee);
if(v3.region.contient(iCaseRecherchee,jCaseRecherchee)) {
return v3.rechercheCase(iCaseRecherchee,jCaseRecherchee);
}
}
if(!(v4==null)){
if(v4.region.contient(caseRecherchee)) {
return v4.rechercheCase(caseRecherchee);
if(v4.region.contient(iCaseRecherchee,jCaseRecherchee)) {
return v4.rechercheCase(iCaseRecherchee,jCaseRecherchee);
}
}
}
//code supposedly unreachable
return caseRecherchee;
return null;
}
private Region rechercheRegion(Region regionRecherchee) {
......@@ -65,4 +67,28 @@ public class QuadtreeNode {
}
public void initialiserDepuisMatrice(Case[][] cases, int longueur, int iBasGauche, int jBasGauche) {
// TODO Auto-generated method stub
if(longueur == 3) {
this.region = new PetiteRegion(cases[iBasGauche][jBasGauche], cases[iBasGauche + 2][jBasGauche + 2], cases);
} else {
this.region = new Region(cases[iBasGauche][jBasGauche], cases[iBasGauche + longueur - 1][jBasGauche + longueur - 1]);
this.v1 = new QuadtreeNode();
this.v1.initialiserDepuisMatrice(cases, longueur/2, iBasGauche + longueur/2, jBasGauche); //Recursion sur la région en haut à gauche
this.v2 = new QuadtreeNode();
this.v2.initialiserDepuisMatrice(cases, longueur/2, iBasGauche + longueur/2, jBasGauche + longueur/2); //Recursion sur la région en haut à droite
this.v3 = new QuadtreeNode();
this.v3.initialiserDepuisMatrice(cases, longueur/2, iBasGauche, jBasGauche + longueur/2); //Recursion sur la région en bas à droite
this.v4 = new QuadtreeNode();
this.v4.initialiserDepuisMatrice(cases, longueur/2, iBasGauche, jBasGauche); // Recusrion sur la région en bas à gauche
}
}
}
......@@ -14,8 +14,18 @@ public class Region {
public Region(Case basGauche, Case hautDroite) {
this.basGauche = basGauche;
this.hautDroite = hautDroite;
this.acquise = false;
}
public void setHautDroite(Case hautDroite) {
this.hautDroite = hautDroite;
}
public void setBasGauche(Case basGauche) {
this.basGauche = basGauche;
}
public boolean estAcquise() {
// TODO Auto-generated method stub
return false;
......@@ -23,20 +33,28 @@ public class Region {
public Case getBasGauche() {
// TODO Auto-generated method stub
return null;
return this.basGauche;
}
public Case getHautDroite() {
// TODO Auto-generated method stub
return null;
return this.hautDroite;
}
public boolean contient(Case caseRecherchee) {
public boolean contient(int iCaseRecherchee, int jCaseRecherchee) {
// TODO Auto-generated method stub
return (caseRecherchee.colonne >= this.basGauche.colonne
&& caseRecherchee.colonne <= this.hautDroite.colonne
&& caseRecherchee.ligne >= this.basGauche.ligne
&& caseRecherchee.ligne <= this.hautDroite.ligne);
return (iCaseRecherchee >= this.basGauche.colonne
&& iCaseRecherchee <= this.hautDroite.colonne
&& jCaseRecherchee >= this.basGauche.ligne
&& jCaseRecherchee <= this.hautDroite.ligne);
}
public boolean isAcquise() {
return acquise;
}
public void setAcquise(boolean acquise) {
this.acquise = acquise;
}
......
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