问题描述
我有代理在网格中移动并添加到他们在网格中的位置和每一帧我想将每个像素的值分散到该位置的半径范围内,包括它本身,但是每当我使用它时,值都会飙升,任何解释?
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]
我没有太关注代码的其余部分,所以我可能还没有解决你的疑问。