Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
; Bjoern Hoehrmann <bjoern@hoehrmann.de> <http://bjoern.hoehrmann.de>
(require (lib "graphics.ss" "graphics"))
; Konstanten
(define BREITE 650) ; Breite des Fensters
(define HOEHE 255) ; Hoehe des Fensters
(define ERSTES-X 0.5) ; erster wert fuer x (es muss gelten 0<x<1)
(define WDH-SCHRITT-1 300) ; Wiederholungen im ersten Schritt
(define WDH-SCHRITT-2 100) ; Wiederholungen im zweiten Schritt
; Oeffne ein Fenster und weise den Viewport an 'vp' zu.
(define (mit) (open-graphics) (open-viewport "fenster" BREITE HOEHE))
(define vp (mit))
; Die Funktion zum Feigenbaum-Diagramm
(define (f a x) (* a x (- 1 x)))
; Funktion func mit Parameter a und x i mal auf sich selbst anwenden
(define (orbit func i x a)
(if (> i 1)
(func a (orbit func (- i 1) x a))
(func a x)
)
)
; Hilfs-Funktionen zum Umrechnen zwischen den beiden Koordinatensystem
(define (a2pixel a) (* (- a 1) (/ BREITE 3)))
(define (x2pixel x) (* x HOEHE))
(define (pixel2a p) (+ (* 3 (/ p BREITE)) 1))
; Errechnet einen neuen x-Wert und zeichnet einen Pixel an der
; entsprechenden Stelle im Ausgabefenster
(define (zeichne-y-wert a x)
(let ((x-neu (f a x)))
((draw-pixel vp) (make-posn (a2pixel a) (x2pixel x-neu)))
x-neu)
)
; Errechnet fuer eine gegebene Spalte im Pixel-Koordinatensystem
; den dazugehoerigen Wert fuer a Element [1;4] und laesst alle
; dazugehoerigen x-Werte auf der y-Achse zeichnen
(define (zeichne-spalte x pixel-spalte)
(let ((v (pixel2a pixel-spalte)))
(let ((x-neu (orbit f WDH-SCHRITT-2 x v)))
(orbit zeichne-y-wert WDH-SCHRITT-1 x-neu v)
)
)
(+ pixel-spalte 1)
)
; Laesst zeichne-spalte fuer alle moeglichen Spalten im Pixel-
; Koordinatensystem die entsprechenden Punkte zeichnen.
(define (feigenbaum)
(orbit zeichne-spalte BREITE 0 ERSTES-X)
)
; Aufruf mit (feigenbaum)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment