2

私は周りを見回しましたが、ほとんどがテクスチャに使用されているようで、Perlin/Simplex Noise を 2 次元座標 x と y のセットに実装する方法を見つけようとして立ち往生していることに気付きました。

私がやろうとしているのは、2 つのランダムな座標 x & y を入力してから、変更された x & y を返すことだけですか、それとも不可能ですか?

pythonsノイズを使用して座標を作成できるようにしていますが、パーリン ノイズを理解するのは非常に複雑であり、その仕組みを完全に理解することはできません。

4

1 に答える 1

2

2D座標のコレクションに不確実性を追加するためにPerlinNoiseを使用することができます(コレクションが単一のペアである場合、それも問題ありません)。返されたノイズ値(指定されたライブラリの場合は[-1、1]の範囲)をいくつかの要因と一緒に検討して、入力座標にどの程度影響するかを判断できます。係数が大きいほど、ノイズがデータに与える影響が大きくなります。考えられる最も単純な例の1つを次に示します。

from noise import snoise2 # Simplex noise for 2D points

x, y = 0.5, 0.3
factor = 0.1
n = snoise2(x, y)
print x + n * factor, y + n * factor

また、はるかに大きな要素を考慮して、同じアイデアを画像に適用することもできます。結果の座標を考慮factor = 15して最近傍に丸め、左の画像から右の画像に移動します。

ここに画像の説明を入力してください ここに画像の説明を入力してください

画像を取得するための完全なコードは次のとおりです。要因n1n2は、「退屈でない」画像を取得するために使用されました。

import sys
from noise import snoise2
from PIL import Image

img = Image.open(sys.argv[1]).convert('L')
result = Image.new('L', img.size)
width, height = img.size

factor = 15
res = result.load()
im = img.load()
for x in xrange(width):
    for y in xrange(height):
        n1 = snoise2(x, y)
        n2 = snoise2(y, x)
        pt = [int(round(x + n1 * factor)), int(round(y + n2 * factor))]
        pt[0] = min(max(0, pt[0]), width - 1)
        pt[1] = min(max(0, pt[1]), height - 1)
        res[x, y] = im[tuple(pt)]
result.save(sys.argv[2])

もちろん、これはPerlinNoiseの使用方法を損なうものではありません。別の例として、特定の機能が与えられた場合、入力を「ノイズ化」し、前述の要素と組み合わせてさまざまな出力を作成できます。たとえば、これはコサインに基づく関数でそれを行った結果です。

ここに画像の説明を入力してください

于 2013-02-19T19:33:09.343 に答える