如何在Racket中以递归方式将一个以上的图像迭代放到另一个图像上?

时间:2016-02-22 04:00:49

标签: scheme

我试图创建一个将n个白云放在随机位置的蓝天上的功能。我尝试过使用场景图像,但我无法弄清楚如何在其上获得多个点。我看了地方图像,地点图像/对齐,但我理解地方图像是最简单的。该功能需要获取点数,黑色天空的宽度和高度。

1 个答案:

答案 0 :(得分:4)

实际上,我相信你已经得到了你需要的答案 - 你已经有办法添加一个点。这意味着您可以采用黑色天空 - 图像 - 并添加白点来创建新图像。现在,您需要做的就是获取那个图像,并为其添加另一个白点(使用与添加第一个白点相同的方法),依此类推。

这就是“递归方式”的含义(如问题标题中所述)。

您的代码(感谢发布它!)缺少递归的基本情况。这就是为什么它永远不会退出。

这是一个固定的(希望)版本的代码(未经过测试,但希望能够得到正确的想法):

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