2013-03-12 182 views
1

我正在開發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值,圖案變得塊狀,看起來沒有機構。 有沒有辦法改變我的公式(或者可能是全新的),這會使它適合我的需求?

+0

請提供一些關於您想要實現的更多信息。 – Frank 2013-03-12 09:11:59

+0

我需要一個僞隨機數生成器,它基於3個種子(實際的種子,x和y,它們都是整數)工作,生成從-1到1的浮點數,當負數輸入給出時也可以使用。 – Thiago 2013-03-12 15:43:30

+0

是這個JAVA?看起來像它。 – Frank 2013-03-12 15:45:40

回答

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; 

} 

您可以將您的種子容易添加到它。

+0

謝謝!這個函數產生的輸出看起來非常好。我唯一的問題仍然是當我給負面座標時,這給出了一個塊狀圖案。你知道如何解決這個問題嗎? – Thiago 2013-03-12 15:55:42

+0

abs()them ..... – Frank 2013-03-12 15:56:35

+0

是的,這是可行的,但它會使噪音軸對稱,這不是我的目標。應該有另一種方法來實現它。 – Thiago 2013-03-12 16:19:56