আমি ডায়মন্ড স্কয়ারের সাথে কিছু কাজ করার পরে পার্লিন নয়েজের সাথে কথা বলছি। আমি হুগো ইলিয়াসের বাস্তবায়ন অনুসরণ করেছি যা মূলত, প্রতিটি সমন্বিত মান নিক্ষেপ করার জন্য ইনপুট হিসাবে এক্স, ওয়াই দিয়ে একটি ক্রিয়াকলাপ তৈরি করে।
আমার পিএইচপি কোড এখানে :
আমার দুটি প্রশ্ন আছে:
অ্যারেতে উচ্চতার মানচিত্র তৈরি করতে আমি কীভাবে অ্যালগরিদম ব্যবহার করব? আমি এটি পুরোপুরি বুঝতে পারি নি এবং কেবল পিএইচপি সিউডোকোডে পোর্ট করেছিলাম, তবে কোথাও পড়ার পরে শেষ ফাংশনটি (মানচিত্র_প্রেইন) করছিলাম যে অ্যালগরিদম "ম্যাজিকালি" আপনাকে প্রদত্ত প্রতিটি এক্স, ওয়াই পয়েন্টের জন্য স্থানান্তরিত মান দেয় (স্পষ্টতই, এর পড়া না করেই) সংলগ্ন মান), আমি এলোমেলো ফাংশন হিসাবে ব্যবহার করার সময় এটি পেয়েছিmt_rand(-100,100)/100;
এবং এটি ক্রিপ্টোগ্রাফিক ব্যবহার করার সময়: 1.0-(($n*($n*$n*15731+789221)+1376312589)&0x7fffffff)/1073741824.0;
(যা, বিটিডাব্লু, পিএইচপি তে "যেমন রয়েছে" প্রয়োগ করা যেতে পারে?):
সুতরাং, সংক্ষেপে তিনটি প্রশ্ন:
- আমার কোড কি সঠিক?
- কোডটিতে বর্ণিত হিসাবে এলোমেলো ফাংশনটি পিএইচপিতে পোর্ট করা যেতে পারে? এটি কোনও ত্রুটি নিক্ষেপ করে, তবে ফলাফলগুলি পাওয়া যায় না।
- আমি কীভাবে আসলে অ্যালগরিদম ব্যবহার করব?
হালনাগাদ
ঠিক আছে, গুস্তাভসন কাগজে দেখানো কোডটির একটি পিএইচপি পোর্ট তৈরি করেছে, এবং অন্যান্য কোডার যেমন বলেছে, এটি কেবল একটি অষ্টক উত্পন্ন করে। গোলমালটির ক্রিয়াকলাপ নিয়ন্ত্রণ করতে একাধিক অক্টেভ, প্রশস্ততা, ফ্রিকোয়েন্সি ইত্যাদির ধারণাগুলি সহ এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে অন্য কোনও দরকারী সাইট / কাগজ / গাইড রয়েছে? গুস্তাভসনের কাগজে কেবল ফলাফলগুলি দেখানো হয়েছে, অ্যালগোরিদমের আসল বাস্তবায়ন নয়, সম্ভবত আমি কিছু মিস করছি?
আপডেট 2
@ নাথান
আমি এরকম কিছু তৈরি করেছি:
$persistence = 0.5;
for ($j = 0; $j < $size; $j++) {
for ($i = 0; $i < $size; $i++) {
for ($o = 0; $o < 8; $o++) {
$frequency = pow(2,$o);
$amplitude = pow($persistence, $o);
$value += SimplexNoise($i*$frequency, $j * $frequency) * $amplitude;
}
//$value = SimplexNoise($i, $j) + 0.5 * SimplexNoise($i, $j) + 0.25 * SimplexNoise($i, $j);
$this->mapArray[$i][$j] = new Cell($value);
এবং মানগুলি ০.১-এ স্বাভাবিক করার পরে, আমি একটি বরং নিস্তেজ উচ্চতার মানচিত্র পেয়েছি যেমন:
আমি কীভাবে মানচিত্র বীজ করব? সম্ভবত আমার যা বাস্তবায়নের দরকার তা হল তৃতীয় মানের একটি এলোমেলো উচ্চতা সহ 3 ডি সংস্করণ? তবে যদি তা হয় তবে আমাকে প্রতিবেশী মূল্যবোধ বিবেচনার জন্য খুঁজে বের করতে হবে, যা আমি হীরা বর্গাকার অ্যালগরিদমের মতো কিছু দিয়ে শেষ করব, ঠিক আমি কী করতে চাই না।
আপডেট 3
আরও পার্লিন কাজ। আমার ফলাফলগুলিতে গোলমালটি পরিচালনা করার জন্য আমার এখনও কোনও উপায় খুঁজে পাওয়া যায় নি। এই অষ্টক এবং চূড়ান্ত ফলাফল দেখুন:
অক্টাভা I to IV
সংকলিত
প্রতিটি অষ্টক বেশ প্রায় একই। কোডটি পরীক্ষা করুন:
$persistence = 0.5;
for ($j = 0; $j < $size; $j++) {
for ($i = 0; $i < $size; $i++) {
$value = 0;
for ($o = 0; $o < 4; $o++) {
$frequency = pow(2,$o);
$amplitude = pow($persistence, $o);
$value += improved_noise($i*$frequency, $j*$frequency, 0.5)*$amplitude;
}
$this->map[$i][$j] = new Cell($value);
ফলাফলগুলি স্বাভাবিক করা হয়। গোলমালের বিকাশে আপনি কী শক্তিশালী প্রভাব ফেলবেন? আমি উদাহরণগুলি দেখি যেখানে প্রশস্ততা পরিবর্তন করা নরম বা রুক্ষ পৃষ্ঠকে দেয় তবে আমি একটি বিশাল প্রশস্ততা দিলেও আমি সামান্য পার্থক্য দেখি।