坐标x,y使用此函数
以整数编码import groovy.transform.CompileStatic
@CompileStatic
class Example {
def foo() {
fooo() // highlighted as `Cannot resolve symbol 'fooo'`: shows as error in IJ14
}
}
似乎x已被转换为无符号短文。
x和y在[-32767 32767]
范围内将索引转换为x,y元组的函数是什么?
答案 0 :(得分:3)
所有的python整数都很长(除非你用更大的数字玩)。
要提取x和y,只需颠倒上述函数的步骤即可。
def int_to_signed_short(value):
return -(value & 0x8000) | (value & 0x7fff)
def xy_from_index(index):
x, y = index & 65535, (index >> 16) + 16
return map(int_to_signed_short, [x, y])
更详细地说,你的函数取两个数字并将它们换成二进制数,这样它们就不会相互重叠。
x & 65535
仅保留x
的最右边16位,因为65535是二进制的16 1。详细了解bitwise AND。
(y - 16) << 16
将数字y - 16
向左移16位。因此,如果您的数字是二进制的XXXXX,它将变为XXXXX0000000000000000。详细了解bitwise shift。
A | B
将对两个数字的位进行OR运算。由于A右边16个,B长16个,因此A和B不会相互干扰。详细了解bitwise OR
一旦你理解了这一点,就应该清楚我的功能是如何反过来的。
示例强>
>>> index = index_from_xy(1234, 5678)
>>> index
371066066
>>> xy_from_index(index)
(1234, 5678)