如何在 Racket 中以递归方式将一个图像的多次迭代放置到另一个图像上?
How do I place more than one iteration of an image onto another single image in a recursive way in Racket?
我正在尝试创建一个函数,将 n 朵白云随机放置在蓝天上。我尝试过使用 place-image,但我不知道如何在其上获得多个点。我查看了 place-images place-image/align,但我知道 place-image 是最简单的。该函数需要获取点数、黑色天空的宽度和高度。
其实,我相信你已经得到了你需要的答案——你已经有了加一个点的方法。这意味着您有办法拍摄黑色天空(图像)并添加白点来创建新图像。现在,您需要做的就是拍摄 that 图像,并向其添加另一个白点(使用与添加第一个白点相同的方法),依此类推等等。
这就是 "recursive way" 的意思(如您的问题标题中所述)。
您的代码(感谢发布!)缺少递归的基本情况。这就是它永远不会退出的原因。
这是代码的固定(我希望)版本(未经测试,但希望能理解正确的想法):
(define (draw-cloudy-sky num-clouds width height)
(cond ((zero? num-clouds) (rectangle width height "solid" "skyblue"))
(else (place-image (circle 10 "solid" "grey") (random width) (random height)
(draw-cloudy-sky (sub1 num-clouds) width height))))
我正在尝试创建一个函数,将 n 朵白云随机放置在蓝天上。我尝试过使用 place-image,但我不知道如何在其上获得多个点。我查看了 place-images place-image/align,但我知道 place-image 是最简单的。该函数需要获取点数、黑色天空的宽度和高度。
其实,我相信你已经得到了你需要的答案——你已经有了加一个点的方法。这意味着您有办法拍摄黑色天空(图像)并添加白点来创建新图像。现在,您需要做的就是拍摄 that 图像,并向其添加另一个白点(使用与添加第一个白点相同的方法),依此类推等等。
这就是 "recursive way" 的意思(如您的问题标题中所述)。
您的代码(感谢发布!)缺少递归的基本情况。这就是它永远不会退出的原因。
这是代码的固定(我希望)版本(未经测试,但希望能理解正确的想法):
(define (draw-cloudy-sky num-clouds width height)
(cond ((zero? num-clouds) (rectangle width height "solid" "skyblue"))
(else (place-image (circle 10 "solid" "grey") (random width) (random height)
(draw-cloudy-sky (sub1 num-clouds) width height))))