以下伪代码如何转换成Python?
function IntNoise(32-bit integer: x)
x = (x<<13) ^ x;
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end IntNoise function
我不确定以下各项:32-bit integer: x
调用中的IntNoise
参数; <<
和&7fffffff
。
该函数是此网页上的随机数生成器:Perlin Noise。
逐行,这是更改:
function IntNoise(32-bit integer: x)
我们不需要声明参数类型,并且不想使用CamelCase,所以第一行是:
def intnoise(x):
下一行唯一的问题是分号。删除它,我们得到:
x = (x << 13) ^ x
x将向左移动 13位,然后将结果按x的起始值按位exclusive-OR-ed。
在下一行,再次没有分号,并且7ffffff
必须以0x
为前缀,因此:
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0)
总共,这使得:
def intnoise(x):
x = (x << 13) ^ x
return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0)
“ 32位整数”部分没有,除非您使用numpy.int32
。只要有意义,就将值屏蔽为32位。
“ <
“&7fffffff”需要进行转换。 “&”代表,但十六进制文字需要一点点:0x7fffffff
。
作为一项学习练习-很好,但是一旦您了解它,只需对随机数使用os.urandom(4)
,对各种伪随机数发生器使用random
中的函数。
从您的代码中我真正理解的是,函数IntNoise
将32-bit integer
作为输入。 <<
是我所知的左移运算符。并将数字的位左移13次。 ^
是指数的。并且7fffffff
必须是十六进制表示形式的数字。它是8位数字,每个数字,即f和7占用4位。 f
是15
的十六进制值。