From 951c966fdc9913a9d08341a65fafe936a20cdf59 Mon Sep 17 00:00:00 2001 From: Bruno Cichon Date: Fri, 28 Aug 2015 21:45:00 +0200 Subject: Add turtle-system --- src/turtle-system.lisp | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/turtle-system.lisp (limited to 'src/turtle-system.lisp') 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))))) -- cgit v1.2.3-54-g00ecf