![]() |
Frage zur Kochkurve
Hi, also ich beschäftige mich zur zeit mit rekursionsgrafiken und im speziellen mit der kochkurve
doch so ganz kappiere ich das nicht 1. problem
Delphi-Quellcode:
müsste es hier nicht so sein dass die procedur immerwieder schon beim ersten koch aufruf nach begin wiederholt wird und die darauffolgenden befehle garnicht an die reihe kommen? schließlich wird schon mit dem 1. befehl die procedur erneut aufgerufen, eben bis die ordnung = 0 ist
procedure koch (ordnung: Integer; laenge, winkel: Real);
begin if ordnung = 0 then begin x := x+laenge*cos(winkel); y := y-laenge*sin(winkel); PaintBox.Canvas.LineTo (Round(x), Round(y)); end else begin koch (ordnung-1, laenge / 3, winkel); winkel := winkel + pi / 3; koch (ordnung-1, laenge / 3, winkel); winkel := winkel - 2 * pi / 3; koch (ordnung-1, laenge / 3, winkel); winkel := winkel + pi / 3; koch (ordnung-1, laenge / 3, winkel); end; end; versteh nicht wie die darauffolgenden befehle aufgerufen werden können, vllt nur ein denkfehler von mir irgendwie 2. problem ja mein 2. problem ist eigentlich das mit den winkel und dem pi, wie kommt man auf die formel die den winkel ändern lässt und warum 2 mal die gleiche formel und dazwischen eine andere? selbst würdich da wohl nie draufkommen ja das wärs auch, den rest versteh ich soweit hab leider kein schönes tutorial gefunden in dem mal richtig das ganze erklärt wurde und musste es mir deswegen soweit nur an dem quellcode beibringen ich hoffe hier kann mir wer helfen danke schonmal mfg gnui |
Re: Frage zur Kochkurve
Zu den Winkeln: Das sind einfach die Bogenmaß-Äquivalente zu +60°, -120° und wiederum +60°, die Winkel beim Durchlaufen einer "Koch-Zacke".
|
Re: Frage zur Kochkurve
Hi, herzlich Willkommen!
Zitat:
Jede Prozedur/Funktion läuft im Prinzip von vorne bis hinten durch, da diese nicht vorzeitig verlassen wird. Ruft eine Prozedur sich selbst auf, wir der nachfolgende Code erst einmal ignoriert, jedoch nach Eintreten der Abbruchbedingung, die dafür sorgt, dass die Selbstaufrufe nicht mehr stattfinden, von hinten nach vorne abgearbeitet. Der Grund hierbei liegt im Stack. Es wird sukzessive bei den Selbstaufrufen etwas in den Stack geschrieben und dieser wird dann wieder rückwärts geleert bzw. abgearbeitet. Bildlich kannst du dir einen Stack (einen Speicher) vorstellen wie eine sehr schmale Sackgasse. Es fahren Autos hinein, doch ein Umdrehen ist nicht möglich. Daher müssen die zuletzt eingefahrenen Autos zuerst wieder entfernt werden, um ans erste Auto zu kommen. |
Re: Frage zur Kochkurve
ok vielen dank, hab mir das ganze mal im einzelschrittmodus mit variablenüberwachung angesehn und nun kappier ich die ganze reihenfolge in der prozedur
und mit dem bogenmaß ist nun auch logisch, werd mir da vllt ne funktion schreiben so dass ich in der prozedur zum besseren verständnis die gradzahl reinschreiben kann |
Re: Frage zur Kochkurve
noch eine frage
wie kommt man dadrauf:
Delphi-Quellcode:
weiß nicht was ich damit anfangen soll, also wie ich da selber hätte draufkommen können
x := x+laenge*cos(winkel);
y := y-laenge*sin(winkel); |
Re: Frage zur Kochkurve
Zitat:
Zitat:
|
Re: Frage zur Kochkurve
ok danke werd ich machen
meine funktion zru umwandlung klappt auch, aber so is natürlich bequemer^^ |
Re: Frage zur Kochkurve
könnte mir vllt jemand noch ein wenig erklären wie das in der procedur mit den rekursiven aufrufen aussieht?
ist ziemlich verwirrend finde ich ich versteh dass so das je höher die ordnung desto öfter wird der erste rekursive aufruf irgendwie durchlaufen und so oft wird die strecke geteilt, in jedem teilabschnitt werden dann durch die anderen rekursiven aufrufe die formen eingefügt aber so richtig ist mir das eben nicht klar |
Re: Frage zur Kochkurve
Gehe die Procedure mal mit dem Debugger durch, beobachte Bild und Variablen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz