【发布时间】:2015-03-08 19:53:06
【问题描述】:
如何根据x、y 和seed 值生成相同的随机数?因此,如果您一直为x、y 和seed 选择完全相同的值,则从0.0 到1.0 将始终返回相同的float。比如:
//Returns value from 0.0 to 1.0
public static float random(int seed, int x, int y) {
...
return rand;
}
编辑: 我想我找到了一种可以完成这项工作的方法(对不起,如果我问错了问题):
public static float random(int x, int y) {
int n = x + y * 57;
n = (n << 13) ^ n;
return Math.abs((1.0f - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7FFFFFFF) / 1073741824.0f));
}
【问题讨论】:
-
你想用它做什么?
-
三个值生成相同的数字不是生成随机数
-
@starblue 用于地形生成,因此值需要始终相同
-
"不使用 new Random()" 你在问如何实现自己的伪随机数生成器吗?如果是这样,请阅读Wikipedia
-
@Blam 这种事情就是伪随机生成器的用途:具有类似随机分布的可重复结果。只需将所有三个输入视为同一种子的一部分。 OP 应该发布询问伪随机生成器而不是随机生成器的问题,但我认为这是分裂的头发(此外,并不是每个人都知道随机与伪随机)