27 lines
922 B
Clojure
27 lines
922 B
Clojure
(defn draw-circle [draw-function x0 y0 radius]
|
|
(letfn [(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)]
|
|
(draw-function x+ y+)
|
|
(draw-function x+ y-)
|
|
(draw-function x- y+)
|
|
(draw-function x- y-)
|
|
(draw-function x0y+ xy0+)
|
|
(draw-function x0y+ xy0-)
|
|
(draw-function x0y- xy0+)
|
|
(draw-function x0y- xy0-)
|
|
(let [[y m] (if (pos? m)
|
|
[(dec y) (- m (* 8 y))]
|
|
[y m])]
|
|
(when (<= x y)
|
|
(put (inc x)
|
|
y
|
|
(+ m 4 (* 8 x)))))))]
|
|
(put 0 radius (- 5 (* 4 radius)))))
|