summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-31 15:45:14 +0200
committerBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-31 15:45:14 +0200
commit2f99d51951296d2651847bfb95f98d280dcfd9b9 (patch)
treeb5b724b28a02c3d948bb18d0333b192c89ae8516
parent951c966fdc9913a9d08341a65fafe936a20cdf59 (diff)
Add bracketed system for turtle
-rw-r--r--src/package.lisp2
-rw-r--r--src/turtle-system.lisp24
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))