;-------------------------------------- ; ; AlgoDat 1 ; ; Übung 2 ; ; michael pollak [0826037] ; ;-------------------------------------- ;--------------------------- fraktal koch schneeflocke -------------------------- ; das programm zeichnet, überraschenderweise, eine kochsche schneeflocke, wie sie in der wikipedia beschrieben ist. http://de.wikipedia.org/wiki/Koch-Kurve ; es sollte problemlos funktionieren. ; ich habe zuerst die kochkurve gemacht, also den zweiten teil (koch_s steht für koch_seite), und danach mit der ersten funktion kochk den stern zusammengesetzt. ; ja, was auch immer man in dieser kurzdoku schreiben sollte... ich denke der quellcode ist mit den comments selbsterklärend. ; ; bemerkung für das tutoren-team: findet ihr nicht dass diese ganzen im endeffekt gleichlautenden dokumentationen etwas redundant sind???????? to kochk :l :min ; zeichnet durch 3 faches wiederholen der seiten, und dementsprechende winkel die gesamte schneeflocke ; eingaben ; :l gibt an wie lange die erste dreiecksseite sein soll, also die maximale kantengröße der schneeflocke ; :min gibt an, wie lange die seiten mindestens sein müssen, also wie klein verzweigt die schneeflocke sein soll. koch_s :l :min rt 120 koch_s :l :min rt 120 koch_s :l :min rt 120 end to koch_s :l :min ; zeichnet eine seite der koch-schneeflocke mit der seitenlänge :l und einer mindestseitenlänge von :min if :l<:min [fd :l stop] koch_s :l*1/3 :min lt 60 koch_s :l*1/3 :min rt 120 koch_s :l*1/3 :min lt 60 koch_s :l*1/3 :min end ; beispieleingaben: ; für ein sehr genaues fraktal: kochk 1000 1 ; für ein "mittleres" fraktal: kochk 100 10 ; für einen leicht erweiterten stern: kochk 100 25 ; für stern: kochk 100 50 ;--------------------------- fraktal pythagoräischer baum -------------------------- ; das programm zeichnet einen pythagoröischen baum, wie in der angabe und der wikipedia (http://de.wikipedia.org/wiki/Pythagoras_Baum) beschrieben. ; mein erstes fraktal, daher ein wenig kompliziert zu lesen. es wäre wohl auch einfacher gegangen denke ich, aber nachdem ich so lange auf dieses beispiel gestarrt habe, wollte ich es nicht mehr weiter ausbauen. ; es tut was es tun soll. ; zeichnet einen pythagoras baum mit einem gleichschenkligen, rechtwinkeligen dreicke, setzt darauf die quadrate der schenkel, setzt darauf wieder ein dreieck, ... und wird rekursiv aufgerufen bis die seitenlänge kleiner der minimalen länge ist. ; probleme hatte ich am anfang einige, vor allem zu verstehen wie rekursionen in sich selbst funktionieren, und an welcher stelle mit welchem winkel sie aufgerufen werden müssen. to pythbaum :a :mind ;generiert wiederholungen eines gleichschenkeligen, rechtwinkeligen dreickes mit der grundlinie :a, auf dem jeweils 2 quadrate aufsetzen. :mind gibt an, welche mindestlänge die grundlinie haben muss. if :a < :mind [stop] ;beende turtle, wenn grundlinie (:a) kleiner ist als die angegebene mindestlänge :mind. ;zeichne grundlinie lt 90 fd :a ;rechte ecken rt 45 fd sqrt((:a*:a)/2) rt 90 fd sqrt((:a*:a)/2) ;rekursiver aufruf eingebaut lt 90 pythbaum sqrt((:a*:a)/2) :mind rt 180 fd sqrt((:a*:a)/2) rt 90 fd sqrt((:a*:a)/2) ;zum nächsten ausgangspunkt gehen rt 180 fd sqrt((:a*:a)/2) rt 90 ;linke ecken fd sqrt((:a*:a)/2) lt 90 fd sqrt((:a*:a)/2) ;rekursiver aufruf eingebaut pythbaum sqrt((:a*:a)/2) :mind lt 90 fd sqrt((:a*:a)/2) lt 90 fd sqrt((:a*:a)/2) ;turtle zum ausgangspunkt zurückschicken lt 90 fd sqrt((:a*:a)/2) lt 135 end ; beispieleingaben: ; für ein sehr genaues fraktal: pythbaum 100 1 ; für ein "mittleres" fraktal: pythbaum 100 10 ; leichte fortpflanzung: pythbaum 100 50 ; zeige nur erste fortpflanzung: pythbaum 100 100