Java 菱形平方算法实现中用位运算符理解数组访问
问题是,在Notch的“微型飞行器”中,哪一个引用了该技术的实现。完整的源代码是可用的 我不明白用于访问和更改值数组的方法是如何工作的 给定指定的Java 菱形平方算法实现中用位运算符理解数组访问,java,arrays,algorithm,bitwise-operators,Java,Arrays,Algorithm,Bitwise Operators,问题是,在Notch的“微型飞行器”中,哪一个引用了该技术的实现。完整的源代码是可用的 我不明白用于访问和更改值数组的方法是如何工作的 给定指定的宽度和高度,我们初始化一个名为长度宽度*高度值的双一维数组,并使用以下方法访问和更改点的值(x,y): 我不理解操作x&(width-1)和y&(height-1)的目的,特别是考虑到,据我所知,width和height应该相等,这样算法才能正常工作。如果是这种情况,操作不应该每次都返回0(极端情况除外),因为x
宽度
和高度
,我们初始化一个名为长度宽度*高度
值的双
一维数组,并使用以下方法访问和更改点的值(x,y)
:
我不理解操作x&(width-1)
和y&(height-1)
的目的,特别是考虑到,据我所知,width
和height
应该相等,这样算法才能正常工作。如果是这种情况,操作不应该每次都返回0
(极端情况除外),因为x
和y
消息来源提到,这些方法具有“允许地形完美包裹生成纹理边缘的副作用”,但我不明白这是如何实现的。它适用于宽度和高度为2^n的情况,如宽度为256时,宽度-1将为255,一个逻辑and和255的任意值将在0和255的范围内,右包装。这是有效的。我没有意识到让数组环绕可以使算法在2^n的大小下工作:“缺失”值只是从相反的边上选择的。
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;
}