前回*1の続き。円を描く。使うのは以下のプログラム。
;;; circle.scm
(define (gr_circle xc yc r color)
(define x r)
(define y 0)
(do
;;; update rule
([i 0 (+ i 1)])
;;; condition
([< x y])
;;; body
(begin
(gr_dot (+ xc x) (+ yc y) color)
(gr_dot (+ xc x) (- yc y) color)
(gr_dot (- xc x) (+ yc y) color)
(gr_dot (- xc x) (- yc y) color)
(gr_dot (+ xc y) (+ yc x) color)
(gr_dot (+ xc y) (- yc x) color)
(gr_dot (- xc y) (+ yc x) color)
(gr_dot (- xc y) (- yc x) color)
(set! r (- r (+ (arithmetic-shift y 1) 1)))
(if (<= r 0)
(begin
(set! x (- x 1))
(set! r (+ r (arithmetic-shift x 1)))
)
)
(set! y (+ y 1))
)
)
)
以下のコードで画像を生成する。
(include "grBMP.scm")
(include "line.scm")
(include "circle.scm")
(gr_line 20 20 200 300 WHITE)
(gr_circle 50 50 20 BLUE)
結果は以下の通り。
わかりにくいが線と円を描けた。