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

AWT/Swing Java Discussion :

Dessiner un arbre avec la récursion


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut Dessiner un arbre avec la récursion
    Bonjour,
    Je dois dessiner un arbre en utilisant la récursion.
    Je sais comment tracer mes lignes, dans la méthodes paint(graphic g) et comment faire les angles (en utilisant sinus et cosinus) mais je ne vois vraiment pas comment faire pour dessiner cet arbre avec la récursion, j'arrive donc à dessiner juste le tronc et les 3 premières branches. Voici ce à quoi l'arbre doit ressembler:


    En gros:
    - 3 branches partent de chaque embranchement : une qui prolonge, une qui a un angle de 40degré en moins et une avec un angles de 40 degrés en plus
    - les branches mesurent chaque fois 1/2 de sa branche "mère": donc dans le premier cas, les trois branchent doivent mesurer 1/2 du tronc
    - mon dessin ne montre que 2 niveau, mais je dois en faire 8

    Pouvez vous m'aider svp?

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Salut

    si tu arrive a déterminer la taille et la position de trois branches fille de ton arbre à partir de ta branche mère, je ne voie pas trop ou se situe ton problème.

    Pour la façon de le faire avec récursion, je verrais une méthode qui.

    -prend en paramètre:
    *la branche mère afin de déterminer position et angle des branches fille
    *le nombre de boucles restant à faire pour savoir quand s'arrêter
    -dessine la premiére branche fille et appelle récursivement la méthode
    -dessine la deuxième branche fille et appelle récursivement la méthode
    -dessine la troisième branche fille et appelle récursivement la méthode

    Si ça ne t'aide pas plus, il nous faudra une question plus précise ou un peu de ton code.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il est même possible de faire plus simple en jouant sur des translations et rotations.

    La méthode récursive prendra en paramètre le contexte graphique, la taille du segment à dessiner et un compteur de récursivité et devra:

    1. Vérifier la condition d'arrêt
    2. Dessiner le segment verticalement depuis l'origine du repère (0,0) jusqu'à la fin du segment (0,-taille segment).
    3. Faire une translation vers la fin du segment (0,-taille segment)
    4. Boucler sur le nombre de fils (avec un index allant de 0 à n-1)
    5. créer un contexte graphique temporaire avec la méthode create de la classe graphics (afin de ne pas avoir à réappliquer les rotations inverses à chaque fois, ce qui est pénible à gérer)
    6. Appliquer la rotation voulue sur las graphics (angle en gradient * ( valeur de l'index moins quotient de la division entière du nombre de branches par deux afin d'avoir des valeurs réparties autours de 0, par exemple pour 3: -1,0,1)
    7. Et on appele la méthode récursive en passant en paramètre la nouvelle taille du segment (segment courant / 2) et en incrémentant localement le compteur de récursivité.
    8. On détruit le contexte graphique temporaire
    9. Fin de la boucle.

    A noter qu'il faut, avant d'appeler la méthode récursive, penser à faire une translation vers l'endroit qui sera la base de l'arbre (grosso modo: largeur/2, hauteur-marge éventuelle). La taille du segment initial devra être la hauteur du composant / 2 moins la marge éventuelle.

    (je l'ai codé chez moi, ça tourne sans le moindre problème.

Discussions similaires

  1. dessiner un arbre avec des JLabels
    Par cannelline dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 23/02/2011, 20h49
  2. Dessiner un arbre de decision avec matlab
    Par SVDSVD dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/12/2009, 10h14
  3. dessiner des arbres avec java
    Par manelisg dans le forum 2D
    Réponses: 13
    Dernier message: 09/04/2009, 16h29
  4. Dessiner un repere avec GDI ?
    Par djiwalloo dans le forum MFC
    Réponses: 19
    Dernier message: 12/10/2004, 11h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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