我正在尝试根据上一步更新每个步骤的地图。我有一个 ref 是数字向量的向量,为了模糊我的世界地图,我向左、向右、向上和向下旋转,然后平均我的四个新世界地图。我将此更新作为主循环中的“更改”。它最初很快,但越来越慢。我是否没有以某种我不知道的方式放开我的脑袋?似乎它在每一步都进行了所有先前的计算。这是我的代码:
我定义地图:
(def gradient-map
(ref( vec (repeat columns (vec (repeat rows 0))))))
这是我的更新功能:
(defn rotate-grid-up [grid]
(map #(concat (rest %) [(last %)]) grid))
(defn rotate-grid-down [grid]
(map #(concat [(first %)] (drop-last %)) grid))
(defn rotate-grid-right [grid]
(concat [(first grid)] (drop-last grid)))
(defn rotate-grid-left [grid]
(concat (rest grid) [(last grid)]))
(defn blur [grid]
(let [g1 (rotate-grid-up grid)
g2 (rotate-grid-down grid)
g3 (rotate-grid-left grid)
g4 (rotate-grid-right grid)]
(vec (map
(fn [r1 r2 r3 r4 r5]
(vec (map
#(/ (+ %1 %2 %3 %4 %5) 5)
r1 r2 r3 r4 r5)))
g1 g2 g3 g4 grid))))
然后在我的绘图循环中,我模糊了每个 tic
(dosync (alter gradient-map blur))
并且绘制循环减慢到爬行。