Created
June 10, 2013 18:18
-
-
Save hoehrmann/5750988 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Bjoern Hoehrmann <[email protected]> <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