为了完全预先,这是关于作业,但这本身不是作业。该任务使用噪声来创建酷炫的图形。我在Python方面有一些经验,但还不足以解决这个问题。
我在生成种子随机[-1,1]时遇到了麻烦。我老师给我的伪代码来自Hugo Elias.
伪代码:
function Noise1(integer x, integer y)
n = x + y * 57
n = (n<<13) ^ n;
return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end function
我在Python中的尝试:
def noise(x, y):
n = x + y * 57
n = (n<<5) ^ n;
return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0)
问题是return语句中的& 7fffffff
位。首先,我不确定那是什么操作。也许有点转变?其次,我不确定如何在Python中执行该操作。我刚刚删除了那部分,但是我得到了巨大的负数,远不及[-1,1]
答案 0 :(得分:3)
&
符号代表按位AND
^
符号代表按位XOR
并且7FFFFFFF
是HEX
个号码
在编程中,您可以使用0x
7FFFFFFF
0x7FFFFFFF
来表示十六进制数字
Some further reading on hex numbers
要在python中执行二进制AND
,只需使用& 0x7FFFFFFF
在此处查看有关bitwise operations in python
答案 1 :(得分:1)
我在现有代码中将7FFFFFFF
替换为0x7FFFFFFF
,并尝试插入一些随机值,我得到的所有答案都在[-1,1]中。
答案 2 :(得分:1)
问题在于&amp; 7fffffff位在return语句中。首先,我不确定那是什么操作。也许有点转变?
位掩码。 <<
用于转移。 &
是按位AND。 7fffffff
,解释为十六进制数,是一个数量,如果以二进制重写,有31位,所有这些都是1.效果是选择值的低位31位。 / p>
要告诉Python 7fffffff
应该被解释为十六进制数字,您必须在其前面添加0x
,因此0x7fffffff
。
其次,我不确定如何在Python中执行该操作。
与伪代码相同(即使用&
)。