用方案语言绘制圆

时间:2016-04-29 16:40:02

标签: scheme geometry

我最近在方案中使用了中点圆算法绘制一个圆,但是它只能绘制一个半径不大于10的小圆,当半径增加时,它变成一个八边形。谁能告诉我如何纠正我的代码?

(define (Circle x0 y0 r)
  (let ((x 0) (y r) (dp (- 1 r)))
   (CircleGo dp x0 x y0 y)))

(define (CircleGo dp x0 x y0 y)
  (let ((x1 (+ x 1))(y1 (- y 1)))
    (let ( (dp1 (+ (* 2 x1) 3)) (dp2 (+ (- (* 2 x1) (* 2 y1)) 5)))
        (if (<= x y)
              (if (< dp 0)
              (append (list (+ x0 x)(+ y0 y)
                        (- x0 x) (+ y0 y)
                         (+ x0 x) (- y0 y)
                             (- x0 x) (- y0 y)
                                (+ x0 y) (+ y0 x)
                                     (- x0 y) (+ y0 x)
                                        (+ x0 y) (- y0 x)
                                          (- x0 y) (- y0 x))
                (CircleGo dp1 x0 x1 y0 y))
              (append (list (+ x0 x) (+ y0 y)
                         (- x0 x) (+ y0 y)
                           (+ x0 x) (- y0 y)
                             (- x0 x) (- y0 y)
                               (+ x0 y) (+ y0 x)
                                 (- x0 y) (+ y0 x)
                                   (+ x0 y) (- y0 x)
                                    (- x0 y) (- y0 x))
                (CircleGo dp2 x0 x1 y0 y1)))    
          (list )))))

1 个答案:

答案 0 :(得分:0)

我认为这个问题与数学有很大关系,而不是编程。听起来你需要一个接受弧度的中心,半径和角度的函数,并返回指定点的x和y坐标。 Sine和Cosine是你的朋友。具体而言,(x0 + r * Cos(theta), y0 + r * Sin(theta))