私はあなたの質問を答えとして擬似コードを望んでいるのを見ました。私はグラデーション(私はすでに互換性が困難なシンプレックスノイズ機能を持っています)を使用せずに、何か他のことをやってしまいました。
考えられるのは、間隔の長さを選択することです(ただし、大きなものは丸め誤差が小さくなります)。ランダムなシードを使用すると、ノイズの間隔を考慮します。[s, s + I]
ここで、Iは間隔の長さ、sはシードです。次に、角度θをI/(2 * Pi) * theta
にマッピングすることによって、円の周りに「ラップ」します。ただし、ノイズ値s
とs + I
が同じであることを確認する必要があります。そうでない場合は、サークルに不連続性があります。しかしこれは簡単です。 x = s
あれば、我々はmid
を減算し、x = s + I
ならば、我々はmid
を追加することを
interpolate(x, s, I)
mid <- noise(s) - noise(s + I)
out <- noise(x)
out <- out + (x - s)/I * mid
out <- out - (s + I - x)/I * mid
return out
注:[s, s + I]
でx
与え、ちょうどこれを行います。
ここで、アングルからノイズ値へのマッピングがあります。円が望む半径が与えられると、ノイズの最小値と最大値を設定し、評価したい任意のシータについて、円の半径に対応する値を加算します。あなたはすでにあなたの平均半径(r
)、あなたは(noisemin
、noisemax
)欲しい分散を持っている、とあなたのノイズ関数は[-1, 1]
の値を出力することを想定し
radius(theta)
s <- randomDouble
I <- 1
theta <- theta/(2 * pi)
dr <- interpolate(theta, s, I)
dr <- dr * (noisemax - noisemin)/2 + (noisemax + noisemin)/2
return dr + r
:極座標では、これは次のようになります。 noisemaxとnoiseminの間にタイトなスプレッドが必要です。そうでなければサークルはほとんどぐらつくでしょう。
正方形については同じ処理を行いますが、コントロールや補間は必要ありません。スケーリング係数と間隔の正方形の辺の長さです。
あなたは空想を得て、非線形補間を行うことができますが、私は本当に必要がないと、シンプレックスノイズを混乱させるかもしれません。