我尝试使用Gloss.Raster.Array
在屏幕上有效地绘制一组点。它使用Array D DIM2 Color
作为绘图点的容器。目前它是一个500x500阵列,代表一个'位图'。
假设每帧我生成1个新点来显示。
我没有找到另一种方法来调整现有的修复数组,以包含一个新的点,而不是像traverse
那样看起来像这样:
{-# INLINE traverseFn #-}
traverseFn px py = (\lookupfn i@(Z :. x :. y) ->
if x == px && y == py then red else lookupfn i)
newarr px py = R.traverse oldarr id (traverseFn px py)
我怀疑这可能会变得相当低效:为了一点而遍历整个500x500阵列。但我想也许ghc会做一些优化魔术并且它赢了。
原来是这样的。我试图描述,它说newarr
需要97.2%的时间。它也很慢。
我对整个haskell和修复生态系统都有点新意,采取我的第一步,所以我可能不知道某事或做错事(无论是在我的回购代码还是在我的分析尝试中) - 因此寻求帮助:)
是否有一些高效的方法可以在每个帧上更改repa数组中的单个值?或者,如果我想在每一帧上添加500点 - 那么答案是什么呢?