2012-05-02 2 views
2

ページは1Dのパーリンノイズを使用してスケッチ/グラグララインを作成

wobbly circle http://freespace.virgin.net/hugo.elias/models/sketch1.gifに示すように、誰かが私は擬似コードまたは不完全/グラグラ線を描画するための1Dパーリンノイズを使用するための手順を始める助けることができます

私は、aforge.netが1Dおよび2Dパーリンノイズ関数の関数を持っていることがわかりました。雲を生成するために2Dノイズを使用する例を示しています。

http://www.aforgenet.com/framework/docs/html/f2f36ce1-ddab-389e-b538-0ccaca81fa87.htm

しかし、不安定なラインを生成するためにそれを使用してについて移動する方法がわからないです。

答えて

0

1Dから2Dに移行する際に必要な違いは、傾きを計算することだけです。スロープと1Dノイズを取得したら、そのノイズをスロープの方向に垂直な方向に加えてください。

0

私はあなたの質問を答えとして擬似コードを望んでいるのを見ました。私はグラデーション(私はすでに互換性が困難なシンプレックスノイズ機能を持っています)を使用せずに、何か他のことをやってしまいました。

考えられるのは、間隔の長さを選択することです(ただし、大きなものは丸め誤差が小さくなります)。ランダムなシードを使用すると、ノイズの間隔を考慮します。[s, s + I]ここで、Iは間隔の長さ、sはシードです。次に、角度θをI/(2 * Pi) * thetaにマッピングすることによって、円の周りに「ラップ」します。ただし、ノイズ値ss + 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)、あなたは(noiseminnoisemax)欲しい分散を持っている、とあなたのノイズ関数は[-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の間にタイトなスプレッドが必要です。そうでなければサークルはほとんどぐらつくでしょう。

正方形については同じ処理を行いますが、コントロールや補間は必要ありません。スケーリング係数と間隔の正方形の辺の長さです。

あなたは空想を得て、非線形補間を行うことができますが、私は本当に必要がないと、シンプレックスノイズを混乱させるかもしれません。

関連する問題