在菱形平方算法实现中使用按位运算符理解数组访问

时间:2016-01-07 10:26:21

标签: java arrays algorithm bitwise-operators

问题来自于this article,它引用了Notch" Minicraft"中发现的Diamond-square algorithm的实现。完整的源代码可用here

我不明白用于访问和更改值数组的方法是如何工作的。

给定指定的widthheight,我们初始化一个名为double长度为values的{​​{1}}的一维数组,并使用以下方法访问并更改点width * height的值:

(x,y)

我不了解操作的目的public double sample(int x, int y) { return values[(x & (width - 1)) + (y & (height - 1)) * width]; } public void setSample(int x, int y, double value) { values[(x & (width - 1)) + (y & (height - 1)) * width] = value; } x & (width - 1),特别是考虑到我的理解y & (height - 1)width应该相等的事实formula使算法正常工作。如果是这种情况,那么每次操作都不应该返回height(极端情况除外),因为0x < width

消息来源提到这些方法具有允许地形完美地包裹在生成的纹理边缘的副作用,但我不明白它是如何实现的。

0 个答案:

没有答案