2016-04-29 17 views
0

私は最近、円を描くスキームで中点円アルゴリズムを使用しましたが、半径が大きくなると小さな円を描くことができます。半径が大きくなると、それは八角形になります。誰か私のコードを修正する方法を教えてもらえますか?体系図の描画円

(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))))) 

答えて

0

私はこの質問がプログラミングよりも数学とはるかに多いと思います。あなたは、中心、半径、角度をラジアンで受け取り、指定された点のx座標とy座標を返す関数が必要なように思えます。サインとコサインはあなたの友人です。具体的には、(x0 + r * Cos(theta), y0 + r * Sin(theta))

関連する問題