বিরামহীনভাবে টাইলযোগ্য এফবিএম শব্দের তৈরি করার দুটি অংশ রয়েছে। প্রথমত, আপনাকে পার্লিন শোর ফাংশনটি নিজেই টাইলিবল করতে হবে। এখানে একটি সাধারণ পার্লিন শোর ফাংশনের জন্য পাইথন কোড রয়েছে যা 256 অবধি যেকোন সময়কালের সাথে কাজ করে (আপনি প্রথম বিভাগটি সংশোধন করে তুচ্ছভাবে এটি যতটা বাড়িয়ে দিতে পারেন):
import random
import math
from PIL import Image
perm = range(256)
random.shuffle(perm)
perm += perm
dirs = [(math.cos(a * 2.0 * math.pi / 256),
math.sin(a * 2.0 * math.pi / 256))
for a in range(256)]
def noise(x, y, per):
def surflet(gridX, gridY):
distX, distY = abs(x-gridX), abs(y-gridY)
polyX = 1 - 6*distX**5 + 15*distX**4 - 10*distX**3
polyY = 1 - 6*distY**5 + 15*distY**4 - 10*distY**3
hashed = perm[perm[int(gridX)%per] + int(gridY)%per]
grad = (x-gridX)*dirs[hashed][0] + (y-gridY)*dirs[hashed][1]
return polyX * polyY * grad
intX, intY = int(x), int(y)
return (surflet(intX+0, intY+0) + surflet(intX+1, intY+0) +
surflet(intX+0, intY+1) + surflet(intX+1, intY+1))
পার্লিন শব্দটি সামান্য "সার্ফলেট" এর সংমিশ্রণ থেকে উত্পন্ন হয় যা এলোমেলোভাবে ভিত্তিক গ্রেডিয়েন্ট এবং পৃথকযোগ্য বহুবর্ষীয় ফলফ ফাংশনের উত্পাদন। এটি একটি ইতিবাচক অঞ্চল (হলুদ) এবং নেতিবাচক অঞ্চল দেয় (নীল)
সার্ফলেটগুলির 2x2 ব্যাপ্তি থাকে এবং এটি পূর্ণসংখ্যার জাল পয়েন্টগুলিতে কেন্দ্রীভূত হয়, তাই স্পেসের প্রতিটি বিন্দুতে পার্লিন শোরগোলের মানটি এটি কোষের কোণে থাকা সার্ফলেটগুলি যোগ করে তৈরি করা হয় ming
আপনি যদি কিছু সময়ের সাথে গ্রেডিয়েন্ট দিকগুলি মোড়ানো করেন তবে শব্দটি নিজেই একই সময়কালে বিজোড়হীনভাবে মোড়ানো হবে। এই কারণেই উপরের কোডটি জালিকান স্থানাঙ্কের মড্যালোটিকে পেরিটেশন টেবিলের মাধ্যমে হ্যাশ করার আগে পিরিয়ড নেয় takes
অন্য পদক্ষেপটি হ'ল অষ্টভীর সংমিশ্রনের সময় আপনি অষ্টভের ফ্রিকোয়েন্সি সহ সময়কালটি স্কেল করতে চান। মূলত, আপনি প্রতিটি অষ্টকটি একাধিকবারের চেয়ে একবারে পুরো ন্যায় চিত্রটি একবার টাইল করতে চাইবেন:
def fBm(x, y, per, octs):
val = 0
for o in range(octs):
val += 0.5**o * noise(x*2**o, y*2**o, per*2**o)
return val
এটি একসাথে রাখুন এবং আপনি এই জাতীয় কিছু পান:
size, freq, octs, data = 128, 1/32.0, 5, []
for y in range(size):
for x in range(size):
data.append(fBm(x*freq, y*freq, int(size*freq), octs))
im = Image.new("L", (size, size))
im.putdata(data, 128, 128)
im.save("noise.png")
আপনি দেখতে পাচ্ছেন, এটি সত্যই নির্বিঘ্নে টালি করে:
কিছু ছোট টুইট এবং রঙ ম্যাপিংয়ের সাথে, এখানে মেঘের চিত্রটি 2x2 টাইল করা আছে:
আশাকরি এটা সাহায্য করবে!