30 lines
1021 B
Common Lisp
30 lines
1021 B
Common Lisp
(defun draw-circle (draw-function x0 y0 radius)
|
|
(labels ((foo (x y)
|
|
(funcall draw-function x y))
|
|
(put (x y m)
|
|
(let ((x+ (+ x0 x))
|
|
(x- (- x0 x))
|
|
(y+ (+ y0 y))
|
|
(y- (- y0 y))
|
|
(x0y+ (+ x0 y))
|
|
(x0y- (- x0 y))
|
|
(xy0+ (+ y0 x))
|
|
(xy0- (- y0 x)))
|
|
(foo x+ y+)
|
|
(foo x+ y-)
|
|
(foo x- y+)
|
|
(foo x- y-)
|
|
(foo x0y+ xy0+)
|
|
(foo x0y+ xy0-)
|
|
(foo x0y- xy0+)
|
|
(foo x0y- xy0-)
|
|
(multiple-value-bind (y m) (if (plusp m)
|
|
(values (1- y) (- m (* 8 y)))
|
|
(values y m))
|
|
(when (<= x y)
|
|
(put (1+ x)
|
|
y
|
|
(+ m 4 (* 8 x))))))))
|
|
(put 0 radius (- 5 (* 4 radius)))
|
|
(values)))
|