-2

そこで、パーリンとシンプレックス ノイズに関する多くのコードと説明が記載された、この便利な Web サイトを見つけました。ただし、コードは別の言語で記述されています。ほとんどをJava用に書き直すことができましたが、1.わからない、2.Javaでの書き方がわからないという機能が1つあります。コードは次のとおりです。

function IntNoise(32-bit integer: x)             

    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    

  end IntNoise function

繰り返しますが、それがどの言語で書かれているかはわかりません。しかし、著者は、この関数が -1 から 1 の間の乱数を返すと述べています。& 記号が正確に何をするのか、誰か説明できますか? そして、一見乱数のように見えるものがたくさんあるのはなぜですか? これをJavaに変換する簡単な方法はありますか?

4

2 に答える 2

6

内側の部分は数値を&ハッシュ/し、このハッシュを 0 から 2 の間の数値に変換するため、1 - (..)-1 から 1 の間の数値を取得します。

-1 と 1 の間の乱数を取得する Java の方法は次のとおりです。

return Math.random() * 2 - 1;

またはシードを使用する必要がある場合

return new Random(x).nextDouble() * 2 - 1;
于 2015-02-23T21:08:57.177 に答える
1

この言語には、非常によく似た演算子があるように見えますが、宣言が異なります。唯一重要なことは、Java にビットを IEEE-754 float として解釈させることです。以下で十分です。

float rNoise(int x){
x = (x<<13) ^ x;
return ( 1.0 - Float.floatToIntBits( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0); 
}

&演算子は、数値の各ビットに対して個別にビットレベルの AND 演算を実行し^、同様の方法で XOR 演算を実行します。XOR はミキシングに&使用され、 はマスキングに使用されるようです。

于 2015-02-23T21:09:24.980 に答える