diff options
author | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-31 15:45:14 +0200 |
---|---|---|
committer | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-31 15:45:14 +0200 |
commit | 2f99d51951296d2651847bfb95f98d280dcfd9b9 (patch) | |
tree | b5b724b28a02c3d948bb18d0333b192c89ae8516 /src | |
parent | 951c966fdc9913a9d08341a65fafe936a20cdf59 (diff) |
Add bracketed system for turtle
Diffstat (limited to 'src')
-rw-r--r-- | src/package.lisp | 2 | ||||
-rw-r--r-- | src/turtle-system.lisp | 24 |
2 files changed, 14 insertions, 12 deletions
diff --git a/src/package.lisp b/src/package.lisp index 6f912dd..713a42d 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -4,5 +4,5 @@ (:use #:cl #:iter #:sb-cga) (:export #:l-system #:turtle-system - #:temp + #:list-of-vectors->list #:iter-l-system)) diff --git a/src/turtle-system.lisp b/src/turtle-system.lisp index 4c1acc9..ddc0c11 100644 --- a/src/turtle-system.lisp +++ b/src/turtle-system.lisp @@ -9,6 +9,7 @@ (defun turtle-system (list radians) (iter (with seed = sb-cga:+identity-matrix+) (with vec = (sb-cga:vec 1.0 0.0 0.0)) + (with pile) (with angle = radians) (for item in list) (case item @@ -57,15 +58,16 @@ (matrix* (rotate-around (vec 1.0 0.0 0.0) (- angle)) (translate vec))))) - #| - (([) ) - ((]) ) - |# - ))) + (([) + (push (cons seed vec) pile)) + ((]) + (let ((last-state (pop pile))) + (setf seed (first last-state) + vec (rest last-state))))))) -(defun temp (list) - (iter (for matrix in list) - (appending - (concatenate 'list - (sb-cga:transform-point (vec 0.0 0.0 0.0) - matrix))))) +(defun list-of-vectors->list (list-of-vectors) + (iterconcat #'(lambda (matrix) + (concatenate 'list + (sb-cga:transform-point (vec 0.0 0.0 0.0) + matrix))) + list-of-vectors)) |