2013-02-19 2 views
2

Я огляделся и, кажется, больше всего использовал его для текстур, и я обнаружил, что пытаюсь понять, как реализовать Perlin/Simplex Noise для набора двухмерных координат x и y.Как вы используете Python's Noise 1.1.1 для координат?

Все, что я пытаюсь сделать, это ввести 2 случайных координаты, x & y, а затем возвращает измененный x & y, или это невозможно?

Я использую pythons noise, чтобы позволить мне создавать координаты, но я обнаружил, что шум perlin довольно сложный для понимания и не может полностью понять, как он работает.

+0

Если вы просто хотите добавить немного шума двух чисел (х и у), которые вам не нужны Перлина шума - просто используйте функцию Гаусса, что-то вроде ['random.gauss (x, noisiness)'] (http://docs.python.org/2/library/random.html#random.gauss) – voithos

+0

Это правда, но перлин шум классный :) – mmgp

+0

gauss kinda работает, но он оставляет что-то, что мне нужно, это то, что координаты могут быть реплицированы, если бы я знал перестановку. – NothingToSay

ответ

2

Можно использовать Perlin Noise для добавления некоторой неопределенности в коллекцию 2D-координат (если коллекция представляет собой одну пару, это тоже хорошо). Вы можете рассмотреть возвращаемое значение шума (в диапазоне [-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 и округляя полученные координаты ближайшего соседа, мы идем с изображения слева, чтобы изображение, справа:

enter image description hereenter image description here

Полный код для получения изображения следующим образом. Факторы n1 и n2 были использованы для получения «менее скучного» изображения.

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]) 

Конечно, это даже не царапается, как может использоваться шум Перлина. В качестве другого примера, учитывая определенную функцию, вы можете «зашумлять» входы и комбинировать с указанным фактором для создания разных выходов. Например, вот результат того, что на какой-либо функции на основе косинуса:

enter image description here

Смежные вопросы