IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Créer un arbre récursifs


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Créer un arbre récursifs
    Bonjour/bonsoir ,
    pour mon cours de java, notre prof nous a demandé de créer une arbre récursif, selon lui c'est "très simple une fois qu'on l'a fait". C'est marrant car cela fait plusieurs heures que j'essaie et rien ne fonctionne.
    Voici l’énoncé :

    Bon déjà première chose, je me suis dit que l'histoire avec les 30°, je pouvais régler cette histoire par après (donc pour le moment je fais +/- 30°).Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    public void drawTree(Graphics2D g, int n, int x, int y, int cpt,int t) {
            if (n == 0) {
                return;
            }
     
            if (cpt == 0) {
                double z;
                z = (y / 1.5);
                g.drawLine(x, y, x, (int) z);
                cpt++;
     
                 t=(int)(Math.sqrt(Math.pow(z - y, 2) + Math.pow(x - x, 2)));
                drawTree(g, n - 1, x, (int) z, cpt,t*(2/3));
            } else {
     
     
                double z;
                z = (y/3)*2;
                double x2, y2, x3, y3;
                x2 = x / (1.33333333);
                y2 = y / (1.33333);
                x3=x*1.3;
                y3 = y * 1.3;
                cpt++;
     
     
                //ici je fais un test pour savoir si la taille est >6
               // j'ai oublié de le remettre.
                Random r = new Random();
                int valeur = 1 + r.nextInt(100 - 1);
                if (valeur > 25) {
                        g.drawLine(x, y, (int) x2, (int) y2);
                        drawTree(g, n - 1, (int) x2, (int) y2, cpt,t);
     
                }
     
                r = new Random();
                valeur = 1 + r.nextInt(100 - 1);
                if (Math.sqrt(Math.pow(z - y, 2) + Math.pow(x - x, 2)) > 6) {
                    if (valeur > 25) {
                        g.drawLine(x, y, x+t, y+t);
                        drawTree(g, n - 1, (int) x, (int) z, cpt,t);
                    }
                }
     
     
                r = new Random();
                valeur = 1 + r.nextInt(100 - 1);
                if (valeur > 25) {
                    if (Math.sqrt(Math.pow(y2 - y, 2) + Math.pow(x3 - x, 2)) > 6) {
                        g.drawLine(x, y, (int) x3, (int) y2);
                        drawTree(g, n - 1, (int) x3, (int) y2, cpt,t);
                    }
                }
     
     
            }
        }
    Je le mets car je n'ai pas envie que vous ayez l'impression que je viens juste pour avoir des réponses sans chercher par moi même, j'ai évidemment conscience que le résultat de ce code est loin du résultat escompté .J'ai beaucoup modifié ce code, et ce n'est peut être pas la version qui ressemble le plus au résultat de l’énoncer, mais de toute façon je pense que je cherche dans la mauvaise direction depuis le début...
    Au départ j'ai décidé de mettre le cpt à 0,afin d'initialiser le "tronc de base". ensuite j'ai décidé de multiplier (ou de diviser) par 1.3,afin de faire +/- les 30 degrés d'angles. Mes randoms me permettent de savoir si la branche va être dessinée ou pas (condition de l’énoncer) . En gros je post ce message pour avoir une piste, un "bon début", car honnêtement je vois pas dutout comment faire, j'ai pensé à utiliser des formules de trigo (car on a l'angle,la taille,....) mais le prof a dit que c'etait simple
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Heu, tu complique tout là pour rien

    tout est dans l'énoncé, il ne te faut à chaque étape que 3 paramètre:

    la longueur de la branche
    son angle
    son point de départ

    Donc ton code devrais ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void drawRecursive(Graphics g, Point start, float length, float angle){
        calculer la fin du trait (end) avec start, angle et length
        Dessiner ce trait (g.drawLine)
     
       Si "4 chances sur 5"
         drawRecursive(g,end,length*2.0/3.0,angle-30)
       Si "4 chances sur 5"
         drawRecursive(g,end,length*2.0/3.0,angle+30)
       Si "4 chances sur 5"
         drawRecursive(g,end,length*2.0/3.0,angle)
    }

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    bon j'ai pas mis le test sur la longeur mais il est assez facile ^^

Discussions similaires

  1. créer un arbre
    Par caro_caro dans le forum Wicket
    Réponses: 1
    Dernier message: 13/05/2009, 14h14
  2. Créer un arbre
    Par toussaga dans le forum Smalltalk
    Réponses: 1
    Dernier message: 01/06/2008, 10h31
  3. [LDAP] Créer un arbre LDAP
    Par khaoula_14_05 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/03/2008, 18h31
  4. Créer un arbre avec cellules (treeview)
    Par Scritch852 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/03/2007, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo