Last active
March 15, 2018 13:35
-
-
Save brv00/4df198d5827735385fd770cc95b95c7a to your computer and use it in GitHub Desktop.
This file contains 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;;; 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