aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/grid-geometry.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/grid-geometry.lisp')
-rw-r--r--src/grid-geometry.lisp80
1 files changed, 40 insertions, 40 deletions
diff --git a/src/grid-geometry.lisp b/src/grid-geometry.lisp
index f66a41f..ec4edd2 100644
--- a/src/grid-geometry.lisp
+++ b/src/grid-geometry.lisp
@@ -8,30 +8,30 @@
connecting the integer point START-X , START-Y and END-X, END-Y. "
(with-gensyms (sx sy ex ey distance step progress xdiff ydiff)
`(loop
- with ,sx = ,start-x
- with ,sy = ,start-y
- with ,ex = ,end-x
- with ,ey = ,end-y
- with ,xdiff = (- ,ex ,sx)
- with ,ydiff = (- ,ey, sy)
- with ,distance = (max (abs ,xdiff) (abs ,ydiff))
- for ,step from 0 to ,distance
- for ,progress = (if (zerop ,distance) 0.0 (/ ,step ,distance))
- for ,x = (round (+ ,start-x (* ,progress ,xdiff)))
- for ,y = (round (+ ,start-y (* ,progress ,ydiff)))
- do (progn ,@body))))
+ :with ,sx := ,start-x
+ :with ,sy := ,start-y
+ :with ,ex := ,end-x
+ :with ,ey := ,end-y
+ :with ,xdiff := (- ,ex ,sx)
+ :with ,ydiff := (- ,ey, sy)
+ :with ,distance := (max (abs ,xdiff) (abs ,ydiff))
+ :for ,step :from 0 :to ,distance
+ :for ,progress := (if (zerop ,distance) 0.0 (/ ,step ,distance))
+ :for ,x := (round (+ ,start-x (* ,progress ,xdiff)))
+ :for ,y := (round (+ ,start-y (* ,progress ,ydiff)))
+ :do (progn ,@body))))
(defun grid-bbox-for (poly)
"POLY is a list of pairs of xy coordinates. Return a pair of
pairs, ((min-x min-y) (max-x max-y)), representing the bottom left and
top right corners of the bounding box for POLY "
- (loop for (x y) in poly
- minimizing x into x-min
- maximizing x into x-max
- minimizing y into y-min
- maximizing y into y-max
- finally (return (list (list x-min y-min)
- (list x-max y-max)))))
+ (loop :for (x y) :in poly
+ :minimizing x :into x-min
+ :maximizing x :into x-max
+ :minimizing y :into y-min
+ :maximizing y :into y-max
+ :finally (return (list (list x-min y-min)
+ (list x-max y-max)))))
(defun grid-counterclockwisep (a b c)
(> (* (- (first b) (first a))
@@ -49,11 +49,11 @@ top right corners of the bounding box for POLY "
(list x y))
(corner
(list -1 x)))
- (loop for (p1 p2 . more) on poly
- while p2
- when (grid-segments-intersect-p p1 p2 pt corner)
- count 1 into intersection-count
- finally
+ (loop :for (p1 p2 . more) :on poly
+ :while p2
+ :when (grid-segments-intersect-p p1 p2 pt corner)
+ :count 1 :into intersection-count
+ :finally
(progn
(when (grid-segments-intersect-p p1 (first poly) pt corner)
(incf intersection-count))
@@ -71,23 +71,23 @@ top right corners of the bounding box for POLY "
(interior-clause
(when interiorp
`(destructuring-bind ((,x1 ,y1) (,x2 ,y2)) (grid-bbox-for ,points)
- (loop for ,x from ,x1 to ,x2 do
- (loop for ,y from ,y1 to ,y2
- when (grid-poly-contains-p ,points ,x ,y)
- do ,@body))))))
+ (loop :for ,x :from ,x1 :to ,x2 :do
+ (loop :for ,y :from ,y1 :to ,y2
+ :when (grid-poly-contains-p ,points ,x ,y)
+ :do ,@body))))))
`(let ((,points ,path))
(loop
- for ((,x1 ,y1) (,x2 ,y2) . ,more) on ,points
- while ,x2 do
+ :for ((,x1 ,y1) (,x2 ,y2) . ,more) :on ,points
+ :while ,x2 :do
(with-grid-line (,x ,y) (,x1 ,y1) (,x2 ,y2)
,@body)
- finally (progn
- ,autoclose-clause
- ,interior-clause))))))
+ :finally (progn
+ ,autoclose-clause
+ ,interior-clause))))))
(defmacro with-grid-rect ((x y) (left bottom right top) &body body)
- `(loop for ,x from (floor ,left) to (floor ,right) do
- (loop for ,y from (floor ,bottom) to (floor ,top) do ,@body )))
+ `(loop :for ,x :from (floor ,left) :to (floor ,right) :do
+ (loop :for ,y :from (floor ,bottom) :to (floor ,top) :do ,@body)))
(defmacro with-grid-circle
((x y) (cx cy radius &key interiorp) &body body)
@@ -95,8 +95,8 @@ top right corners of the bounding box for POLY "
(let ((comparator
(if interiorp '>= '=)))
`(let ((,sx ,cx) (,sy ,cy) (,rad ,radius))
- (loop for ,x from (- ,sx ,rad) to (+ ,sx ,rad) do
- (loop for ,y from (- ,sy ,rad) to (+ ,sy ,rad) do
+ (loop :for ,x :from (- ,sx ,rad) :to (+ ,sx ,rad) :do
+ (loop :for ,y :from (- ,sy ,rad) :to (+ ,sy ,rad) :do
(when (,comparator ,rad (round (euclidean-dist ,x ,y ,sx ,sy)))
,@body)))))))
@@ -118,7 +118,7 @@ Evaluates the BODY with X Y bound to a point on the bezier curve.
,control-pts)
(,fn
(apply #'bezier-lambda ,points)))
- (loop for ,a from 0.0 to (+ 1.0 ,step) by ,step
- for (,x ,y) = (mapcar #'round (funcall ,fn (clamp 0 ,a 1.0)))
- do ,@body))))
+ (loop :for ,a :from 0.0 :to (+ 1.0 ,step) :by ,step
+ :for (,x ,y) := (mapcar #'round (funcall ,fn (clamp 0 ,a 1.0)))
+ :do ,@body))))