Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-03-2003, 10:14   #1 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
rekursive Programmierung//erste Übungen

Hallo,
nachdem ich mich immer um die rekursive Programmierung gedrückt habe, wollte ich es heute doch mal wissen, als Zielvorgabe hab ich mir dann eine Standardaufgabe gestellt, die zu meiner eigenen Überraschung nach knapp einer Stunde gelöst hatte, diese 'ey das funktioniert ja'-Erlebnis poste ich jetzt mal:
ActionScript:
  1. rekur=function(n,x0,y0,l,winkel){
  2. if(n>0){
  3.     n--;
  4.     l/=3;
  5.     rekur(n,x0,y0,l,winkel)
  6. x0+=l*Math.cos(winkel);
  7. y0+=l*Math.sin(winkel);
  8.         rekur(n,x0,y0,l,winkel-Math.PI/3)
  9.         x0+=l*Math.cos(winkel-Math.PI/3);
  10. y0+=l*Math.sin(winkel-Math.PI/3);
  11.         rekur(n,x0,y0,l,winkel+Math.PI/3)
  12.         x0+=l*Math.cos(winkel+Math.PI/3);
  13. y0+=l*Math.sin(winkel+Math.PI/3);
  14. rekur(n,x0,y0,l,winkel)
  15. }
  16. if(n==0){
  17.     _root.rek.lineTo(x0,y0);
  18. }
  19.         }
  20. _root.createEmptyMovieClip("rek",1);
  21. x0=200;
  22. y0=200;
  23. _root.rek.moveTo(x0,y0);
  24. _root.rek.lineStyle(0);
  25. rekur(5,x0,y0,200,0);
  26. _root.rek.lineTo(400,200);
..das ist alles noch nicht ganz sauber gescriptet, aber ich musste jetzt meiner Begeisterung Luft machen...
Verbesserungen und Korrekturen sind natürlich ausdrücklich erwünscht.

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:19   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Hey cool

Hilbert-Kurven, oder ?

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:28   #3 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
k.A. heißt das so? Ich kenn nur Apfelmännchen

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:29   #4 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
funktioniert nicht nur, sieht auch noch cool aus
sebastian ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:31   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich auch keine Ahnung, deshalb frage ich

Sieht auf jeden Fall klasse aus.

Ausserdem halte ich es für eine gute Idee,
dem Thema Rekursion einen eigenen Thread zu gönnen.
Ich bin gespannt, was dabei herauskommt.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:35   #6 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
lol, ralf hat wieder ne idee dann bin ich ja auch mal gespannt *g*
sebastian ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:37   #7 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
was dabei rauskommt?

ActionScript:
  1. 256 Rekursionsstufen wurden in einer Aktionsliste überschritten.
  2. Es handelt sich wahrscheinlich um eine Endlosschleife.
  3. In diesem Film werden keine weiteren Aktionen ausgeführt.



aber lasst Euch davon nicht abhalten, am besten die Tiefe
als Abbruchkriterium der Funktion mit übergeben.
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:40   #8 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
rofl, war auch mein erster gedanke aber man kann ja auch unter den 256 rekursionen bleiben
sebastian ist offline   Mit Zitat antworten
Alt 18-03-2003, 10:43   #9 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Ich weis flory, aber
-mindestens Mitreden muss man können
-bei meinem Test wirst Du wahrscheinlich schon vor 256 Rekursionsstufen eine andere Fehlermeldung bekommen

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 18-03-2003, 11:12   #10 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Vielleicht koennen wir eine kleine Sammlung an rekursiven
Funktionen anlegen. Zum Beispiel solche Klassiker wie
durch den MovieClip-Baum zu wandern:

ActionScript:
  1. MovieClip.prototype.traverse = function(parent) {
  2.                 //Schutz vor circulären Referenzen
  3.     if(parent != this._parent) return;
  4.     //
  5.     trace(this);
  6.     for (var i in this) {
  7.         this[i].traverse(this);
  8.     }
  9. };
  10.  
  11. depth = 0;
  12. var mc = createEmptyMovieClip("mc" + depth, ++depth);
  13. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  14. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  15. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  16. traverse();

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 18-03-2003, 11:22   #11 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
auf jeden fall sehr nett.

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 18-03-2003, 12:35   #12 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
wenn Du das ganze wieder mit der Übergabe einer Funktion
verknüpftst, wird es interessant:

ActionScript:
  1. MovieClip.prototype.traverse = function(parent,f) {
  2.        
  3.         // erster Aufruf
  4.         if (arguments.length<2) {f=parent; parent=null; }
  5.        
  6.         //Schutz vor circulären Referenzen
  7.         if(parent != this._parent) return;
  8.         //
  9.         f(this);
  10.         for (var i in this) {
  11.                 this[i].traverse(this,f);
  12.         }
  13. };
  14.  
  15. // create
  16. depth = 0;
  17. var mc = createEmptyMovieClip("mc" + depth, ++depth);
  18. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  19. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  20. var mc = mc.createEmptyMovieClip("mc" + depth, ++depth);
  21.  
  22. // trace
  23. traverse(trace);
  24.  
  25. // alle MCs linear in ein Array ablegen, addArguments siehe "Function-Thread"
  26. var mcArr=[];
  27. traverse(function(x,ref) {ref.push(x);}.addArguments(mcArr));
  28. trace(mcArr);
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 18-03-2003, 12:48   #13 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
He he,
schöne Lösung,
auch wenn es mir jedesmal das Hirn verdreht.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 18-03-2003, 13:09   #14 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ja, aber das Prinzip ist immer dasselbe.

Durch die Übergabe einer Funktion bleibt das ganze modular.
Ohne die Funktionsreferenz müsste man ja für jede Aufgabe eine
eigene traverse-Methode schreiben - traverseTrace, traverse2Array
etc.
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 18-03-2003, 13:33   #15 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
hilfe... hab schon n knoten inne birne
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele