Skip to content

Instantly share code, notes, and snippets.

@brv00
Last active March 15, 2018 13:35
Show Gist options
  • Save brv00/4df198d5827735385fd770cc95b95c7a to your computer and use it in GitHub Desktop.
Save brv00/4df198d5827735385fd770cc95b95c7a to your computer and use it in GitHub Desktop.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; IFSによるドラゴンカーブの描画。 (Simple Scheme)
(define top 2.0) (define bottom -1.0) (define left -1.0) (define right 2.0)
(define center-x (/ (image-width (empty-scene)) 2))
(define center-y (/ (* (image-height (empty-scene)) 65) 148))
(define mag
(* 2 (min (/ center-x (- right left)) (/ center-y (- top bottom)))))
(define offset-x (- center-x (* mag 1/2 (+ left right))))
(define offset-y (+ center-y (* mag 1/2 (+ top bottom))))
(define (conv-x x) (+ offset-x (* mag x)))
(define (conv-y y) (- offset-y (* mag y)))
(define (add-dot scn x y)
(place-image (rectangle 1 1 "solid" "black") (conv-x x) (conv-y y) scn))
(define (affine-transform vec mat const)
(list (+ (* (first (first mat)) (first vec))
(* (first (second mat)) (second vec))
(first const))
(+ (* (second (first mat)) (first vec))
(* (second (second mat)) (second vec))
(second const))))
(define (next vec)
(let-values (((mat const) (if (= (random 2) 0)
(values '((-1/2 1/2) (-1/2 -1/2)) '(1/2 1/2))
(values '((1/2 1/2) (-1/2 1/2)) '(1/2 -1/2)))))
(affine-transform vec mat const)))
(big-bang (list '(0 0) (empty-scene)) (on-draw (lambda (w) (cadr w)))
(on-tick (lambda (w)
(let ((v (car w)))
(list (next v) (add-dot (cadr w) (first v) (second v)))))
0.001))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment