Генератор псевдослучайных чисел

Я разрабатываю генератор шума Perlin, который работает на основе целого числа и двух других целых чисел: x и y.

К настоящему времени генератор псевдослучайных чисел выглядит так:

private float noise(int x, int y) {     

    int n = x + y * seed;
    return (1.0f - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824f);

}

Но есть некоторые проблемы с этой реализацией: во-первых, интервал возврата не является постоянным (в идеале, я хотел бы работать с [-1, 1] или [0, 1]) и для отрицательных значений x и y, рисунок становится блочным, совсем не выглядит органичным. Есть ли способ изменить мою формулу (или, может быть, совершенно новую), чтобы она соответствовала моим потребностям?

1 ответ

Я использую этот (я нашел его в сети, но у меня больше нет оригинальной ссылки):

private double noise(int x, int y) {
    int n=(int)x*331+(int)y*337; // add your seed on this line.
    n=(n<<13)^n;
    int nn=(n*(n*n*41333 +53307781)+1376312589)&0x7fffffff;       
    return ((1.0-((double)nn/1073741824.0))+1)/2.0;

}

Вы можете легко добавить свое семя к этому.

Другие вопросы по тегам