Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 绘制螺旋描记器设计图_Design Patterns_Scheme_Racket - Fatal编程技术网

Design patterns 绘制螺旋描记器设计图

Design patterns 绘制螺旋描记器设计图,design-patterns,scheme,racket,Design Patterns,Scheme,Racket,我正试着在球拍上画螺旋形图案()。我可以管理以下代码,但它不起作用: #lang racket (require 2htdp/image 2htdp/universe) (define img (rectangle 500 500 "solid" "white")) (let* ((R 300) ; outer circle radius (r 100) ; inner circle radius (c 30) ; distan

我正试着在球拍上画螺旋形图案()。我可以管理以下代码,但它不起作用:

#lang racket

(require 2htdp/image
         2htdp/universe) 

(define img (rectangle 500 500 "solid" "white"))

(let* ((R 300)   ; outer circle radius
       (r 100)   ; inner circle radius
       (c 30)    ; distance of pen-tip from center of inner circle

       (l (/ c r))
       (k (/ r R))
       (imgfn
        (λ (t)
          (set! img (overlay/xy
                     img
                     (* R(+ (* (- 1 k) (cos (modulo t 360)))
                            (* l k (cos (/(* (- 1 k)
                                             (modulo t 360))
                                          k)))))
                     (* R(- (* (- 1 k) (sin (modulo t 360)))
                            (* l k (sin (/(* (- 1 k)
                                             (modulo t 360))
                                          k)))))
                     (circle 2 "solid" "blue")))
          img)))
  (animate imgfn)) 
下图显示了影响设计的距离:

上面的代码显示了点的小圆圈,但它们并没有画出一条线,即使我试图重用以前的图像。此外,这些点移动得非常快,而我希望速度能稍微慢一点。只有这样,我们才能看到它是否遵循正确的路径

如有任何帮助/建议,将不胜感激

编辑: 按照@ScottHunter的建议添加“度->弧度”后,输出如下:

预期图像类似于以下内容(另请参见上的模式):


如何实现这一点?

球拍触发功能预期角度为弧度,而不是度

此外,您没有正确地使用
过多/xy
;以下内容使代码(稍微)更具可读性,并生成预期图像的更简单版本:

(define image_size 500)
(define image_radius (/ image_size 2))
(define img (rectangle image_size image_size "outline" "black"))

(let* ((R 300)   ; outer circle radius
       (r 100)   ; inner circle radius
       (c 30)    ; distance of pen-tip from center of inner circle

       (l (/ c r))
       (k (/ r R))
       (imgfn
        (λ (t)
          (let* ((rad (degrees->radians (/ (modulo t 360) 1)))
                 (scale (/ (- 1 k) k))
                 (x (* R(+ (* (- 1 k) (cos rad))
                           (* l k (cos (* scale rad))))))
                 (y (* R(- (* (- 1 k) (sin rad))
                           (* l k (sin (* scale rad)))))))
                 (set! img 
                       (overlay/xy img 
                                   (+ (- image_radius 1) x)
                                   (+ (- image_radius 1) y)
                                   (circle 2 "solid" "blue")))
          img))))
  (animate imgfn))

它以什么方式“不工作”?我已经在上面的问题中添加了问题。预期输出是什么?我已经在问题中添加了预期输出。在代码中添加“度->弧度”后,确实会导致一些图案绘制,但它仍然远离预期的图案。我在问题中添加了一个gif输出文件。
(define image_size 500)
(define image_radius (/ image_size 2))
(define img (rectangle image_size image_size "outline" "black"))

(let* ((R 300)   ; outer circle radius
       (r 100)   ; inner circle radius
       (c 30)    ; distance of pen-tip from center of inner circle

       (l (/ c r))
       (k (/ r R))
       (imgfn
        (λ (t)
          (let* ((rad (degrees->radians (/ (modulo t 360) 1)))
                 (scale (/ (- 1 k) k))
                 (x (* R(+ (* (- 1 k) (cos rad))
                           (* l k (cos (* scale rad))))))
                 (y (* R(- (* (- 1 k) (sin rad))
                           (* l k (sin (* scale rad)))))))
                 (set! img 
                       (overlay/xy img 
                                   (+ (- image_radius 1) x)
                                   (+ (- image_radius 1) y)
                                   (circle 2 "solid" "blue")))
          img))))
  (animate imgfn))