Fractal 3 branches

Résolu/Fermé
mopadi Messages postés 6 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 18 décembre 2012 - 21 nov. 2012 à 16:27
mopadi Messages postés 6 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 18 décembre 2012 - 21 nov. 2012 à 21:02
Bonjour,





Je suis étudiants, et j'ai un projet à rendre très prochainement. j'ai besoin de votre aide afin de trouver un algorithme efficace dans la réalisation d'un fractal dit à trois branches (https://upload.wikimedia.org/wikipedia/commons/2/2d/Arbre_3_branches.png à l'aide de la balise canvas en javascript.
Après plusieurs après midi à chercher la logique de cette fractal à mettre sous forme de code, je demande votre aide.

Desole pour les éventuelles fautes d'orthographes. et merci beaucoup
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 nov. 2012 à 18:59
Je ne connais pas trop JavaScript, et encore moins l'outil Canevas, alors je ne sais pas trop ce qu'il est possible de faire, en particulier ce serait bien de pouvoir copier le dessin actuel pour le coller plusieurs fois à des endroits différents et avec des translations, mais comme je ne sais pas si c'est possible je vais me contenter de dessiner les branches une par une, ce qui est nettement plus long, mais ce sera un début.

function fractale_aux(n,x,y,sx,sy)
{
   // Tracer une ligne entre les points (x,y) et (x+sx/2,y+sy/2)
   
   if (n>0)
   {
      fractale_aux(n-1,x+sx/2,y+y/2, sx/2,sy/2);
      fractale_aux(n-1,x+sx/2,y+y/2,-sy/2,sx/2);
      fractale_aux(n-1,x+sx/2,y+y/2, sy/2,sx/2);
   }
}

function fractale(n,size)
{
   fractale_aux(n,sz/2,0,0,sz);
}

Remarque : j'ai fait ça de tête, il faudrait vérifier que ça dessine bien la bonne chose...
À vue de nez, il faudrait prendre n=8 ou 9, pour avoir les mêmes détails que sur l'image.
0
mopadi Messages postés 6 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 18 décembre 2012
21 nov. 2012 à 19:32
d'abord merci d'avoir repondu.
L'outil canevas permet de dessiner, dans notre ca, je pense qu'on doit dessiner des segment, et pour ca il faut une coordonnée de depart de de fin du segment.

Je ne comprend malheureusement pas votre code, donc si il était possible de plus le détailler, ou d'expliquer la logique de votre code.
En faite il est la mon principale proleme, je n'arrive pas à imaginé d'imbrication de condition et boucle pour faire ce dessin. Je suis à la recher plus du concept, je me debrouillerai ensuite pour le codé de manière a que ca marche :)

merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 nov. 2012 à 20:02
"pour ca il faut une coordonnée de depart de de fin du segment."
Ça tombe bien parce que je les ai, il faut juste remplacer mon commentaire par le code qui va bien.

Après comme c'est une fractale je fais juste un appel récursif, plus exactement trois appels récursifs vu la forme de ta fractale.

// (x,y) est la base de la zone de dessin
// (sx,sy) est le sens d'orientation du dessin
// si (sx>0,s=0) : on dessine vers le haut à partir de (x,y)
// si (sx<0, s=0) : on dessine vers le bas à partir de (x,y)
// si (sx=0, sy>0) : on dessine vers la drotie à partir de (x,y)
// si (sx=0, sy<0) : on dessine vers la gauche à partir de (x,y)
function fractale_aux(n,x,y,sx,sy)
{
   // Tu traces une ligne droite sur ton canevas, à partie de la base, et en suivant l'orientation
   // Tracer une ligne entre les points (x,y) et (x+sx/2,y+sy/2)

   // si n==0 le traitement est terminé, sinon on découpe le dessin en trois parties
   if (n>0)
   {
      // La base des dessins suivants est celle où s'arrête la ligne droite tracée (x+sx/2,y+sy/2)
      fractale_aux(n-1,x+sx/2,y+y/2, sx/2,sy/2); // on conserve l'orientation
      fractale_aux(n-1,x+sx/2,y+y/2,-sy/2,sx/2); // on tourne l'orientation vers la gauche
      fractale_aux(n-1,x+sx/2,y+y/2, sy/2,sx/2); // on tourne l'orientation vers la droite
   }
}

// Fonction principale, dessine un carré de taille "size", avec "n" degrés de récursivité
function fractale(n,size)
{
   // La base du premier segment est au milieu en bas, orientation vers le haut
   fractale_aux(n,sz/2,0,0,sz);
}
0
mopadi Messages postés 6 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 18 décembre 2012
21 nov. 2012 à 20:48
J'ai une question, il vous a fallu combien de temps pour trouver ce code dans votre tête? Comme dit précedement j'y avait passé une aprem... Il y a quelque faute, mais la logique est la, vous m'aurez appris quelque chose aujourd hui :p merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 nov. 2012 à 20:56
Au niveau de la logique c'est assez simple à mettre en place, il suffit de l'avoir déjà vu deux ou trois fois pour savoir comment ça se passe, le plus dur en fait c'est au niveau des indices, parce que c'est vraiment spécifique à ton problème.
0
mopadi Messages postés 6 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 18 décembre 2012
21 nov. 2012 à 21:02
Finalement il m'aura fallu un peu de temps, mais j'ai compris l'intégralité de votre code. c'est au niveau des direction que c'est le plus dur, j'ai du effectuer des test pour avoir les bonnes direction.

Merci beaucoup, je met le post en résolu.
0