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