仮想計算機構

IT業界と無縁な派遣社員のブログ

円を丁寧に描くよ

前回*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 11)))
            (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)
(gr_BMP "test.bmp")

結果は以下の通り。

f:id:riverta1992:20200501212841j:plain

わかりにくいが線と円を描けた。

 

参考文献