【问题标题】:How to get a random number from a 2d coordinate and a seed?如何从二维坐标和种子中获取随机数?
【发布时间】:2013-05-15 17:03:30
【问题描述】:

我正在尝试进行一些基于噪声的地形生成,我需要从一个坐标点和一个种子中获取一个随机点。现在,我正在努力解决的困难部分是如果种子相同,则从同一点返回相同的数字。 (random.nextDouble() 让它简单地转到其他数字)。

我试过做一些方程式:

return ((int) ((randomKey1.charAt((5 ^ x) % 127)) + (int) ((randomKey2
            .charAt(Math.abs(z  ^ 2 % 64) % 127)))) / 256f * 40f);

但这并不完全有效,因为如果你交换 x 和 z 坐标,你会得到一个相似的数字,导致地形看起来像对角线镜像。

已解决:

double getRatCor(int x, int z) {
    double a;

    Random r = new Random(seed + (x*10000) + (z*100));
    a = r.nextDouble()*40;
    System.out.println(a);
    return a;
}

【问题讨论】:

  • 我不明白你的问题。如果你在 Random 上调用 setSeed(),你总是会得到相同的数字,如果你使用相同的种子。
  • 但是我需要为每个坐标使用不同的随机数,即使我多次调用坐标也必须始终相同。因为如果你做 .nextWhatever() 它会切换到另一个数字,但它必须与种子一致。

标签: java random noise


【解决方案1】:

怎么样?

/**
* return random number with seed based on coordinates.
*/
double locationValue(int x,int y){
    long seed = z;
    seed = x + (seed << 32); // make x and z semi-independent parts of the seed.
    Random r = new Random(seed);
    return r.nextDouble();
}

【讨论】:

  • 哦,谢谢!效果相当好,我做了一点不同但使用相同的概念!
猜你喜欢
  • 2023-04-07
  • 2012-12-25
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2018-06-17
  • 2017-04-25
  • 2021-12-11
相关资源
最近更新 更多