diff options
author | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-28 21:45:00 +0200 |
---|---|---|
committer | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-28 21:45:00 +0200 |
commit | 951c966fdc9913a9d08341a65fafe936a20cdf59 (patch) | |
tree | 52d2d14da688abb10643b16c1d3e41aa1b03e90b /src/turtle-system.lisp | |
parent | a6b3d525ebafa6ce8e9e01fcce750d1185aa626f (diff) |
Add turtle-system
Diffstat (limited to 'src/turtle-system.lisp')
-rw-r--r-- | src/turtle-system.lisp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/turtle-system.lisp b/src/turtle-system.lisp new file mode 100644 index 0000000..4c1acc9 --- /dev/null +++ b/src/turtle-system.lisp @@ -0,0 +1,71 @@ +;;;; turtle-system.lisp + +(in-package #:l-system) + +;;;(matrix* translate rotate scale) + +(export 'f) + +(defun turtle-system (list radians) + (iter (with seed = sb-cga:+identity-matrix+) + (with vec = (sb-cga:vec 1.0 0.0 0.0)) + (with angle = radians) + (for item in list) + (case item + ((f) + (collect + (setf seed + (matrix* seed + (translate vec))))) + ((j) + (setf seed + (matrix* seed + (translate 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))))) + ((-) + (setf vec + (transform-point (vec 0.0 0.0 0.0) + (matrix* + (rotate-around (vec 0.0 0.0 1.0) (- angle)) + (translate vec))))) + ((&) + (setf vec + (transform-point (vec 0.0 0.0 0.0) + (matrix* + (rotate-around (vec 0.0 1.0 0.0) angle) + (translate vec))))) + ((^) + (setf vec + (transform-point (vec 0.0 0.0 0.0) + (matrix* + (rotate-around (vec 0.0 1.0 0.0) (- angle)) + (translate vec))))) + ((\ ) + (setf vec + (transform-point (vec 0.0 0.0 0.0) + (matrix* + (rotate-around (vec 1.0 0.0 0.0) angle) + (translate vec))))) + ((/) + (setf vec + (transform-point (vec 0.0 0.0 0.0) + (matrix* + (rotate-around (vec 1.0 0.0 0.0) (- angle)) + (translate vec))))) + #| + (([) ) + ((]) ) + |# + ))) + +(defun temp (list) + (iter (for matrix in list) + (appending + (concatenate 'list + (sb-cga:transform-point (vec 0.0 0.0 0.0) + matrix))))) |