微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

浮动扩散算法在一定时间后爆炸值

如何解决浮动扩散算法在一定时间后爆炸值

我有代理在网格中移动并添加到他们在网格中的位置和每一帧我想将每个像素的值分散到该位置的半径范围内,包括它本身,但是每当我使用它时,值都会飙升,任何解释?

void diffuse() {
  for (int i = 0; i < width; i++) {
    for (int j = 0; j < height; j++) {
      for (int k = -blurRad; k <=blurRad; k++) {
        if (i + k > width - 1 || i + k < 0)
          continue;
        for (int l = -blurRad; l<= blurRad; L++) {
          if (j + l > height - 1 || j + l < 0)
            continue;
          temp[i + k][j + l] += (1 / blurRad * blurRad) * grid[i][j];
          temp[i][j] = (1 / blurRad * blurRad) * grid[i][j];
        }
      }
    }
  }
}

解决方法

我可能完全错了,但我没有足够的声誉来发表评论:(所以这是我的答案:

我想你在这里想做什么

(1 / blurRad * blurRad) * grid[i][j]

是将grid[i][j]除以blurRad的平方而不是乘以1(1/blurRad* blurRad抵消)。它是通过放置一些括号来解决的。此外,请记住在分母上添加 (float) 或加倍。否则,如果 blurRad 是 int,您的除法将被截断。

(1 / (float)(blurRad * blurRad)) * grid[i][j]

我没有太关注代码的其余部分,所以我可能还没有解决你的疑问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。