Flocon de von Koch en Python — Les-mathematiques.net The most powerful custom community solution in the world

Flocon de von Koch en Python

J'ai programmé la construction du flocon de von Koch en Python mais en faisant appel à la récursivité. J'essaie vainement de m'en "débarrasser" mais pour le moment, je suis dans le caca ! Quelqu'un aurait-il une idée. Merci m'sieurs dames et dmoiselles...

voici mon programme :
def koch(l,n):
                    # # Fractacle de Koch
    if n<=0:
        forward(l)
    else:
        koch(l/3,n-1)
        left(60)
        koch(l/3,n-1)
        right(120)
        koch(l/3,n-1)
        left(60)
        koch(l/3,n-1)

def flocon(l,n):
                    # # Flocon de Koch
    koch(l,n)
    right(120)
    koch(l,n)
    right(120)
    koch(l,n)

# programme principal
from turtle import *
etape=int(raw_input("Entrez l\'ordre de l\'etape du flocon de Von Koch "))
taille1=float(raw_input("Entrez la taille du cote du triangle initial "))
flocon(taille1,etape)


# on utilise une methode recursive pour programmer les fonctions

Réponses

  • Bonjour,

    qu'est ce qui te gene dans le fait d'utiliser la recursivité ? Le flocon de von Koch est par definition une construction recursive, c'est donc la facon la plus naturelle de la coder...
  • C’est peut-être plus facile de le tracer point par point avec les fonctions itérées.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • La récursivité n'est pas en cause dans la vitesse d'exécution, mais sans doute le langage choisi.

    Comparer avec ce code tex
    http://www-math.univ-poitiers.fr/~phan/downloads/tex/vonkoch.tex

    issu de la page d'Anthony Phan:
    http://www-math.univ-poitiers.fr/~phan/textrix.html
  • C'est turtle qui est en cause, pas python ( qu'est ce qui faut pas lire parfois... ).
    Si tu rajoutes speed(0), cela ira déjà plus vite, mais je ne suis pas sûr que turtle soit l'outil le plus adapté pour tracer les flocons de Von Koch.
  • Pour t’en débarrasser, utilise les fonctions itérées (le tout dernier exemple). C’est pour Scilab, mais je pense que c’est aisément traduisible pour Python.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @ np : tu obtiens une exécution beaucoup plus rapide si tu remplaces ta dernière boucle par qqchose du genre
    k=1
    while k<=100 do
      X=zeros(2,100);
      X(:,1)=x0;
      for i=2:100
        X(:,i)=hasard(X(:,i-1));
      end
      plot2d(X(1,: ),X(2,: ),style=0,axesflag=0);
      x0=X(:,100);
      k=k+1
    end
    
  • @Arnaud: Je ne vois pas bien pourquoi une tortue serait lente par nature...
    Justement, pour ce genre de dessins, les calculs demandés par le fonctionnement de la tortue devraient être faits de toute façon.

    Sur cette page là, on trouve justement un exemple en python de Von Koch dérécursifié en Python, avec une tortue. Malheureusement, je n'ai pas réussi à le faire tourner pour comparer avec le programme d'Ourson.

    http://en.wikipedia.org/wiki/Koch_snowflake
  • Voilà un exemple non récursif, c'est du TeXgraph:
    [
    a:=5*exp(-2*i*pi/3), b:=5, c:=bar(a), L:=[a,b,c,a],
    for k from 1 to 6 do
        L:= [v:=Nil,
             for z in L do u:=v, v:=z,
               if u<>Nil then
                s1:=hom(v,u,1/3),
                s2:=shift( rot(s1,u,-pi/3), (v-u)/3),
                s3:=hom(u,v,1/3), u,s1,s2,s3
               fi
             od, v],
    od,
    Ligne(L,0)
    ]
    
    14757
  • remarque, tu remplaces juste le calcul d’un point par le calcul de cent points puis leur tracé simultané ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Oui. Ca dépend peut-être de la machine, mais sur mon Mac, une multitude d'appels à plot2d pour afficher une petite matrice est beaucoup plus lente qu'un seul appel pour afficher une grande matrice (scilab 5.2.0). Après tu peux jouer sur le nombre de points affichés, j'ai pris 100 au pif.
  • Je confirme, ça va encore plus vite par paquets de 1000 points, tout en gardant une certaine progressivité de l'affichage. Le plus rapide est sans doute de calculer, je ne sais pas, 100 000 points d'abord, puis de les afficher. Mais là on ne verra pas l'attracteur se dessiner progressivement.
  • J'ajoute le tiers de flocon version nicolas.patrois via un SFI (50000 points) :

    14761
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!