bresenham circles

Known issue: circles of radius 9 crash. (Multiples of 9 overflow the trace.)
This commit is contained in:
Kartik K. Agaram 2021-04-25 22:31:09 -07:00
parent 7148f1222e
commit 606c5681b7
1 changed files with 22 additions and 1 deletions

View File

@ -67,8 +67,29 @@
(fill_rect screen x y (+ x px) (+ y px) color)
(set x (+ x px))
(set x (+ x px)))))
(brcircle . (fn () (screen cx cy r color)
((fn (x y err continue)
(while continue
(pixel screen (- cx x) (+ cy y) color)
(pixel screen (- cx y) (- cy x) color)
(pixel screen (+ cx x) (- cy y) color)
(pixel screen (+ cx y) (+ cy x) color)
(set r err)
(if (<= r y)
(set err (+ err (+ 1 (* 2 (set y (+ y 1))))))
())
(if (or (> r x) (> err y))
(set err (+ err (+ 1 (* 2 (set x (+ x 1))))))
())
(set continue (< x 0))
))
(- 0 r)
0
(- 2 (* 2 r))
1
)))
(main . (fn () (screen keyboard)
(chessboard screen 16)))
))
(sandbox . (+ 1 2))
(sandbox . (brcircle screen 5 5 3 12))
)