summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-31 23:57:33 +0200
committerBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-31 23:57:33 +0200
commit24cb0d21c857d686eefa801d097bd60a854dc227 (patch)
treecba402854f15609bfaadf594b2eb0104b60e9cb2
parent2f99d51951296d2651847bfb95f98d280dcfd9b9 (diff)
Small fix
-rw-r--r--src/l-system.lisp4
-rw-r--r--src/turtle-system.lisp42
2 files changed, 26 insertions, 20 deletions
diff --git a/src/l-system.lisp b/src/l-system.lisp
index c5255a5..79122c7 100644
--- a/src/l-system.lisp
+++ b/src/l-system.lisp
@@ -23,7 +23,9 @@
(defun generate-l-system (rules)
"Make lambda Lindenmayer system"
- `(lambda (atom) (case atom ,@(make-case-clauses-from-rules rules))))
+ `(lambda (atom) (case atom
+ ,@(make-case-clauses-from-rules rules)
+ (t (list atom)))))
(defmacro l-system (&rest rules)
(generate-l-system rules))
diff --git a/src/turtle-system.lisp b/src/turtle-system.lisp
index ddc0c11..5520df4 100644
--- a/src/turtle-system.lisp
+++ b/src/turtle-system.lisp
@@ -5,23 +5,25 @@
;;;(matrix* translate rotate scale)
(export 'f)
+(export '[)
+(export '])
(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)
+ (iter (with pos = (sb-cga:vec 0.0 0.0 0.0))
+ (with vec = (sb-cga:vec 0.0 1.0 0.0))
+ (with pile = '())
(with angle = radians)
(for item in list)
(case item
((f)
(collect
- (setf seed
- (matrix* seed
- (translate vec)))))
+ (setf pos
+ (vec+ pos
+ vec))))
((j)
- (setf seed
- (matrix* seed
- (translate vec))))
+ (setf pos
+ (vec+ pos
+ vec)))
((+)
(setf vec
(transform-point (vec 0.0 0.0 0.0)
@@ -32,7 +34,7 @@
(setf vec
(transform-point (vec 0.0 0.0 0.0)
(matrix*
- (rotate-around (vec 0.0 0.0 1.0) (- angle))
+ (rotate-around (vec 0.0 0.0 -1.0) angle)
(translate vec)))))
((&)
(setf vec
@@ -44,7 +46,7 @@
(setf vec
(transform-point (vec 0.0 0.0 0.0)
(matrix*
- (rotate-around (vec 0.0 1.0 0.0) (- angle))
+ (rotate-around (vec 0.0 -1.0 0.0) angle)
(translate vec)))))
((\ )
(setf vec
@@ -56,18 +58,20 @@
(setf vec
(transform-point (vec 0.0 0.0 0.0)
(matrix*
- (rotate-around (vec 1.0 0.0 0.0) (- angle))
+ (rotate-around (vec -1.0 0.0 0.0) angle)
(translate vec)))))
(([)
- (push (cons seed vec) pile))
+ (push (list pos vec)
+ pile))
((])
- (let ((last-state (pop pile)))
- (setf seed (first last-state)
- vec (rest last-state)))))))
+ (let* ((asd (pop pile))
+ (pos0 (first asd))
+ (vec0 (second asd)))
+ (setf pos pos0)
+ (setf vec vec0))))))
(defun list-of-vectors->list (list-of-vectors)
- (iterconcat #'(lambda (matrix)
+ (iterconcat #'(lambda (vec)
(concatenate 'list
- (sb-cga:transform-point (vec 0.0 0.0 0.0)
- matrix)))
+ vec))
list-of-vectors))