2016-04-29 1 views
0

J'ai récemment utilisé un algorithme de cercle médian dans un schéma pour dessiner un cercle, mais il ne peut dessiner qu'un petit cercle dont le rayon ne dépasse pas 10, lorsque le rayon augmente, il devient un octogone. Quelqu'un peut-il me dire comment corriger mon code?Dessin Cercle en langage schéma

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

Répondre

0

Je pense que cette question a beaucoup plus à voir avec les mathématiques qu'avec la programmation. Il semble que vous ayez besoin d'une fonction qui accepte un centre, un rayon et un angle en radians et renvoie les coordonnées x et y du point spécifié. Sine et Cosine sont tes amis ici. Plus précisément, (x0 + r * Cos(theta), y0 + r * Sin(theta)).