44 lines
1.1 KiB
Racket
44 lines
1.1 KiB
Racket
#lang racket
|
|
(require racket/draw)
|
|
|
|
(define-syntax ⊕ (syntax-rules () [(_ id e) (set! id (+ id e))]))
|
|
|
|
(define (draw-point dc x y)
|
|
(send dc draw-point x y))
|
|
|
|
(define (draw-circle dc x0 y0 r)
|
|
(define f (- 1 r))
|
|
(define ddf_x 1)
|
|
(define ddf_y (* -2 r))
|
|
(define x 0)
|
|
(define y r)
|
|
(draw-point dc x0 (+ y0 r))
|
|
(draw-point dc x0 (- y0 r))
|
|
(draw-point dc (+ x0 r) y0)
|
|
(draw-point dc (- x0 r) y0)
|
|
(let loop ()
|
|
(when (< x y)
|
|
(when (>= f 0)
|
|
(⊕ y -1)
|
|
(⊕ ddf_y 2)
|
|
(⊕ f ddf_y))
|
|
(⊕ x 1)
|
|
(⊕ ddf_x 2)
|
|
(⊕ f ddf_x)
|
|
(draw-point dc (+ x0 x) (+ y0 y))
|
|
(draw-point dc (- x0 x) (+ y0 y))
|
|
(draw-point dc (+ x0 x) (- y0 y))
|
|
(draw-point dc (- x0 x) (- y0 y))
|
|
(draw-point dc (+ x0 y) (+ y0 x))
|
|
(draw-point dc (- x0 y) (+ y0 x))
|
|
(draw-point dc (+ x0 y) (- y0 x))
|
|
(draw-point dc (- x0 y) (- y0 x))
|
|
(loop))))
|
|
|
|
(define bm (make-object bitmap% 25 25))
|
|
(define dc (new bitmap-dc% [bitmap bm]))
|
|
(send dc set-smoothing 'unsmoothed)
|
|
(send dc set-pen "red" 1 'solid)
|
|
(draw-circle dc 12 12 12)
|
|
bm
|