summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@gmail.com>2015-09-05 17:06:59 +0200
committerBruno Cichon <ebrasca.ebrasca@gmail.com>2015-09-05 17:06:59 +0200
commitfb51f24f19abe98716c8b8ad21cafcce647000f4 (patch)
tree6dfa04788c199a51ad635064349f9196ef077102
parent24cb0d21c857d686eefa801d097bd60a854dc227 (diff)
Add support for volume.Small refactoring.
-rw-r--r--src/turtle-system.lisp48
1 files changed, 19 insertions, 29 deletions
diff --git a/src/turtle-system.lisp b/src/turtle-system.lisp
index 5520df4..484eb9f 100644
--- a/src/turtle-system.lisp
+++ b/src/turtle-system.lisp
@@ -8,7 +8,7 @@
(export '[)
(export '])
-(defun turtle-system (list radians)
+(defun turtle-system (fn list radians)
(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 = '())
@@ -16,50 +16,32 @@
(for item in list)
(case item
((f)
- (collect
- (setf pos
- (vec+ pos
- vec))))
+ (let ((new-pos
+ (vec+ pos vec)))
+ (appending (funcall fn pos new-pos vec))
+ (setf pos new-pos)))
((j)
(setf pos
(vec+ pos
vec)))
((+)
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec 0.0 0.0 1.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec 0.0 0.0 1.0) angle)))
((-)
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec 0.0 0.0 -1.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec 0.0 0.0 -1.0) angle)))
((&)
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec 0.0 1.0 0.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec 0.0 1.0 0.0) angle)))
((^)
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec 0.0 -1.0 0.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec 0.0 -1.0 0.0) angle)))
((\ )
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec 1.0 0.0 0.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec 1.0 0.0 0.0) angle)))
((/)
(setf vec
- (transform-point (vec 0.0 0.0 0.0)
- (matrix*
- (rotate-around (vec -1.0 0.0 0.0) angle)
- (translate vec)))))
+ (vec-rotate-around vec (vec -1.0 0.0 0.0) angle)))
(([)
(push (list pos vec)
pile))
@@ -70,8 +52,16 @@
(setf pos pos0)
(setf vec vec0))))))
+;;; Turgle utils
+
(defun list-of-vectors->list (list-of-vectors)
(iterconcat #'(lambda (vec)
(concatenate 'list
vec))
list-of-vectors))
+
+(defun vec-rotate-around (vec vec-rotation angle)
+ (transform-point (vec 0.0 0.0 0.0)
+ (matrix*
+ (rotate-around vec-rotation angle)
+ (translate vec))))