 |
 
|
 |
|
Flocon de von Koch en Python
Envoyé par ourson
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
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.
Le café est un breuvage qui fait dormir,
quand on n’en prend pas.
-+- Alphonse Allais -+-
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.
Le café est un breuvage qui fait dormir,
quand on n’en prend pas.
-+- Alphonse Allais -+-
Génial le flocon en plain TeX !
[attachment 14756 Capturedcran2010-02-1414.28.37.png]
@ 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
Edité 1 fois. La dernière correction date de il y a onze années et a été effectuée par remarque.
@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.
[ en.wikipedia.org]
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)
]
[attachment 14757 VonKoch.png]
remarque, tu remplaces juste le calcul d’un point par le calcul de cent points puis leur tracé simultané ?
Le café est un breuvage qui fait dormir,
quand on n’en prend pas.
-+- Alphonse Allais -+-
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) :
[attachment 14761 Capturedcran2010-02-1422.48.11.png]
Liste des forums - Statistiques du forum
Total
Discussions: 146 946, Messages: 1 472 572, Utilisateurs: 27 822.
Notre dernier utilisateur inscrit walidENS.
Ce forum
Discussions: 2 502, Messages: 18 566.
|
|
|
|
 |
 |
 |
©Emmanuel
Vieillard Baron 01-01-2001
|
|