Noise.JavaScript
JavaScriptでの乱数とノイズ。
ランダム
JavaScriptではランダムな値を取得するためにMath.random()関数を利用することができる。
ノイズ
ノイズはランダムなようだが、スムースな連続性があるため人にとって「自然に」感じられる疑似乱数。アルゴリズムとしてはパーリンノイズが有名。実行結果が同じになるという再現性がある。
シンプレックスノイズ
シンプレックスノイズはパーリンノイズの改良版。
XOR shift
XOR shiftは疑似乱数を生成するアルゴリズム。XORとビットシフトで実装するため高速。
メルセンヌツイスター
メルセンヌツイスターは疑似乱数を生成するアルゴリズム。周期が長い。日本産。
fBm
fBmはフラクタルのこと。日本語では非整数ブラウン運動。マンデルブロが有名。全体を見ても部分的に見ても似ているという自己相似性を持つ。
自然における現象にフラクタルのような性質が見られるものがある。例えば地形が経年で侵食されるさまはフラクタルに近い。
雲などを表現するのに利用できる。
code:Noise.javascript
function random(x, y){
let dot = x * 12.9898 + y * 78.233;
let wave = Math.sin(dot);
let a = wave * 43758.5453123;
return a - Math.floor(a);
}
function noise(x, y){
let ix = Math.floor(x);
let iy = Math.floor(y);
let fx = ix - Math.floor(ix);
let fy = iy - Math.floor(iy);
let xx = random(ix, iy);
let xy = random(ix + 1., iy);
let xz = random(ix, iy + 1.);
let xw = random(ix + 1., iy + 1.);
let ux = fx * fx * (3. - 2. * fx);
let uy = fy * fy * (3. - 2. * fy);
return lerp(xx, xy, ux) + (xz - xx) * uy * (1. - ux) + (xw - xy) * ux * uy;
}
function fbm(x, y){
let v = .0;
let a = .5;
let f = 0.;
for (let i = 0; i < 12; i++) {
v += a * Math.abs(noise(x, y));
p *= 2.;
a *= .5;
}
return v;
}