মানচিত্র তৈরির জন্য এলোমেলো বীজ ফাংশন?


28

আমি মানচিত্র পরিবর্তনের ভিজ্যুয়াল সীমানা হিসাবে (মানচিত্রের মধ্য দিয়ে গিয়ে) একটি এলোমেলো টাইল-ভিত্তিক মানচিত্র উত্পন্ন করার জন্য একটি ফাংশন সন্ধান করছি। আমি চাই মানচিত্রটি অসীম আকারে বড় হোক এবং ধাঁধার মতো কাঠামো থাকুক।

যাইহোক, যদি বিশ্ব অসীম হয় তবে কোনও খেলোয়াড় ইতিমধ্যে যেখানে সমস্যা উত্থাপন করেছিল সেখানে ফিরে যাওয়া। গেমটি অবশ্যই স্মরণ করবে যে সেখানে ফিরে সমস্ত কিছুই আসলে কেমন দেখাচ্ছে।

সুতরাং, আমি ভাবছিলাম - "মাইনক্রাফ্ট কীভাবে এই সমস্যাটি সমাধান করবে?" এবং আমি নিজের কাছে ভেবেছিলাম যে তারা অবশ্যই একটি বীজের সাথে কিছু প্রকারের এলোমেলো-সংখ্যা ফাংশন ব্যবহার করবে, এটি উভয়ই এগিয়ে যেতে পারে তবে পিছনের দিকেও যেতে পারে, এবং সেভাবে পুরানো টাইলগুলি ঠিক যেমনটি তৈরি করতে হয়েছিল ঠিক তেমনই নতুন উপায়েও তৈরি করতে পারে।

এ ব্যাপারে আপনার চিন্তা - ভাবনা কি?


আমার উত্তরটি +5 এ কেমন আছে তবে প্রশ্নটি কেবলমাত্র +2 এ? এটি এখনই প্রথম পৃষ্ঠায় সেরা প্রশ্নগুলির একটি।

2
আপনি ইতিমধ্যে পরিদর্শন / সংশোধিত খণ্ডগুলি কেবল মাইনক্রাফ্টটি সঞ্চয় করে না ?
FxIII

@ এফএক্সআইআইআই: মাইনক্রাফ্ট অবশ্যই হবে, কারণ আপনি ল্যান্ডস্কেপটি পরিবর্তন করতে পারেন। যদি আপনি এটি না করতে পারেন তবে খণ্ডগুলি সংরক্ষণ করা সম্ভবত নষ্ট বা কমপক্ষে একটি অতিরিক্ত জটিলতা।

@ জো ফ্রেসনিগ: ওকে, ওকে ... আমি ভয় পেয়েছি যে আমি সত্যিই বড় কিছু মিস করেছি!
FxIII

উত্তর:


20

আপনি যা লক্ষ্য করেছেন তা হ'ল এলোমেলো নম্বর জেনারেটর এবং একটি শোনার ফাংশনের মধ্যে পার্থক্য । এলোমেলো সংখ্যার জেনারেটর প্রত্যেকবার যখনই আপনি কল করবেন তখন আলাদা সংখ্যা ছড়িয়ে দেয়। একটি শব্দের ফাংশন কিছু আর্গুমেন্ট গ্রহণ করে - বলে, একটি মানচিত্র x এবং y - এবং এলোমেলো জাতীয় পরিসংখ্যানগত বৈশিষ্ট্য সহ সংখ্যাগুলি ছড়িয়ে দেয় , তবে একই যুক্তির জন্য প্রতিবার একই মান , অর্থাৎ এটি একটি সঠিক গাণিতিক ফাংশন।

দুটি খুব ঘনিষ্ঠভাবে সম্পর্কিত। যেমন - একটি শব্দ ফাংশন একটি পৃথক মান প্রতিটি সময় পার দ্বারা একটি র্যান্ডম সংখ্যা উত্পাদক সিমুলেট করতে পারেন noise(1), noise(2), ইত্যাদি। এবং একটি এলোমেলো সংখ্যা জেনারেটর, একটি দৈত্য টেবিলের মধ্যে ফেলে দেওয়া, একটি শব্দ শব্দ হিসাবে কাজ করতে পারে act যদিও উভয় ক্ষেত্রেই আপনি কাজের জন্য ভুল সরঞ্জামটি ব্যবহার করছেন।

Minecraft বিশেষ করে ব্যবহার পারলিন কোলাহল , গোলমাল এক ধরনের যা গনা সস্তা, এবং হচ্ছে একটা কাম্য সম্পত্তি হয়েছে একটানা আপনার যা দরকার হিসাবে অনেক মাত্রা হিসাবে - আপনি গ্রাফ f(x)থেকে f(x + 1), সেখানে কোন আকস্মিক জাম্প হবে। এটি টেক্সচার মড্যুলেশন, ভলিউম্যাট্রিক মেঘ এবং গ্যাস এবং ভূখণ্ড প্রজন্মের মতো অনেক কিছুর জন্য এটি খুব দরকারী করে তোলে।

আপনি যদি খেলতে শুরু করার জন্য কোনও প্রয়োগের সন্ধান করে থাকেন তবে কেন পার্লিনের উন্নত পার্লিন শোর জেনারেটর হ'ল একটি সাধারণ বাস্তবায়ন।


3
নোট করুন যে প্রচুর এলোমেলো সংখ্যার জেনারেটর একটি বীজ ব্যবহার করে এবং একই বীজ প্রদানে একই সংখ্যার সংখ্যার উত্পন্ন করবে।
থাইডিয়ান

3
@ থেইডিয়ান: আপনি যদি প্রতিটি সংখ্যা পুনরুত্পাদন না করতে চান তবে এই ক্ষেত্রে এটি বিশেষভাবে কার্যকর নয়; একটি গোলমাল ফাংশন আপনাকে এর আগে 499 উত্পন্ন না করে 500 তম নম্বর পেতে দেয়।

পার্লিন নয়েজ অ্যালগরিদম দেওয়া, এটি কি ক্রমাঙ্কিত করা সম্ভব? বিবেচনা করুন আমি চাই যে অ্যালগরিদম আরও বেশি প্রাচীর-টাইলস তৈরি করতে পারে এবং তারপরে স্পেস-টাইলসের একটি প্যাক তৈরি করতে পারে।
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

3
ছয় মিনিটে আমি যে লিঙ্কগুলি দিয়েছি তা আপনি পড়েন এবং বুঝতে পারেন নি।

1
এই উত্তরটি খাঁজ এর ব্লগ পোস্টের সাথে সম্পূর্ণ পারতাম: notch.tumblr.com/post/3746989361/terrain-generation-part-1
deceleratedcaviar

3

মাইনক্রাফ্ট তার প্রজন্মকে যেভাবে নিয়ন্ত্রণ করে তা হ'ল একটি স্তর বীজ তৈরি করে যা গেমটির জন্য সমস্ত এলোমেলো সংখ্যা প্রজন্ম বীজ করতে ব্যবহৃত হয়। অনুরোধ করার সময় যদি কোনও অংশ ডিস্কে উপস্থিত না থাকে তবে স্তরের বীজের উপর ভিত্তি করে এটি নচের জেনারেশন ফাংশন ব্যবহার করে উত্পন্ন হবে ; এটি পরে ডিস্কে সংরক্ষণ করা হয়

দেখে মনে হচ্ছে আপনি অনুরূপ আচরণ অর্জন করতে চাইছেন, তাই এটি যাওয়ার নিরাপদ উপায়।


2

জো যেমন বলেছিল, আপনি একটি হ্যাশ ফাংশন সন্ধান করছেন। সাধারণত, এলোমেলো ফাংশনগুলি হ্যাশ ফাংশনগুলি হয় সর্বশেষ ফিরে আসা সংখ্যার সাথে বদ্ধ হয়। সুতরাং যদি Random()ফিরে আসে তবে Hash(seed)=1234দ্বিতীয় কলটি Random()ফিরে আসবে Hash(1234)

আপনি যদি সিউডো এলোমেলো সংখ্যার জন্য একটি সাধারণ হ্যাশিং ফাংশন সন্ধান করছেন তবে মুরমারহ্যাশটি দেখুন । আমি এটি সি # তে প্রয়োগ করেছি এবং আপনার আগ্রহী হলে এটি কোথাও পোস্ট করতে পারি। পার্লিন নয়েজের আরও বিশদ তথ্য যা এই জাতীয় হ্যাশ ফাংশন ব্যবহার করে তা এখানে পাওয়া যাবে এবং সি # তে এর একটি বাস্তবায়ন এখানে রয়েছে

এই সমস্ত তথ্য একটি বছর আগে আমি স্ট্যাক ওভারফ্লোতে এখানে জিজ্ঞাসা করা একটি প্রশ্ন থেকে এসেছিল । আপনি যা দেখছেন তাকে প্রসেসরিজাল কন্টেন্ট জেনারেশন বলা হয়, সুতরাং আপনার যদি আরও তথ্যের প্রয়োজন হয় তবে এটির জন্য অনুসন্ধান করুন। খুশি ভূখণ্ড-উত্পাদন!


-1। পার্লিন শোরের হ্যাশ, এটিতে এমএমএইচ বা অন্যান্য ক্রিপ্টোগ্রাফিক হ্যাশিং রুটিনগুলিতে ব্যবহৃত কৌশলগুলির সাথে কোনও মিল নেই; যে সি # কোডটি আবর্জনা যা এলোমেলো মানগুলির মধ্যে কেবল লিনিয়ার অন্তরঙ্গকরণ করতে দেখা যায়; এটি যথাযথ পার্লিন গোলমালের চেয়ে অনেক বেশি মেমরির প্রয়োজন এবং সম্ভবত এটি ধীর গতিতে চলে।

1
@ জো - আমি দুঃখিত যে পার্লিন নয়েজ প্রয়োগের জন্য আপনি এত দৃ strongly়তার সাথে অনুভব করেছেন। পার্লিন নয়েজ নিজেই একটি হ্যাশ ফাংশনকে একটি অবিচ্ছিন্ন শব্দ ফাংশনে পরিণত করার ধারণা। আমি মারমুরহ্যাশ দিয়ে খুব কার্যকরভাবে প্রচুর পার্লিন নয়েজ তৈরি করেছি। সি # কোড হিসাবে, এটি 2D পার্লিন নয়েসে কোনও একক পয়েন্টের মান প্রোগ্রামিয়ালি কীভাবে নির্ধারণ করা যায় তার একটি উদাহরণ। আমি কখনই এটি উত্পাদনে ব্যবহার করব না, তবে এটি আমার মতে আপনার পোস্ট করা কোডের চেয়ে বেশি সহজ পদক্ষেপ নেওয়া উচিত।
dlras2

1
ওপিকে গোলমাল বা হ্যাশিংয়ের কোনও জ্ঞান ছিল না, তাই আমি কেবল এই আশায় রেফারেন্স সরবরাহ করার চেষ্টা করেছি যে তারা আরও তদন্ত করবে এবং তাদের যা করার দরকার তা কীভাবে প্রয়োগ করতে হবে তা তাদের নিজের সিদ্ধান্ত নেবে।
dlras2

"পার্লিন নয়েজ নিজেই একটি হ্যাশ ফাংশনকে একটি অবিচ্ছিন্ন শব্দ ফাংশনে পরিণত করার ধারণা" " না, কেন পার্লিন উদ্ভাবিত ক্রমাগত শোনার একটি মধ্যে পার্লিন শব্দ (এবং তিনি "সিমপ্লেক্স নয়েজ" বলে না)। সমস্ত ক্রমাগত শব্দ কর্ম পার্লিন শব্দ হয় না; সমস্ত ক্রমাগত শব্দের ক্রিয়াকলাপগুলি এমনকি গ্রেডিয়েন্ট কোলাহল নয়, যার মধ্যে পার্লিন শব্দটি একটি বিশেষ উদাহরণ; আপনি যে জিনিসটির সাথে লিঙ্ক করেছেন সেটি গ্রেডিয়েন্ট গোলমাল নয়, তবে শব্দের মূল্যবান।

আপনার লিঙ্কের কোডটি "পার হওয়া সহজ" কারণ এটি পার্লিন শব্দ নয়; এটি যেমন মসৃণ নয়; এটি আরও বেশি সংস্থান ব্যবহার করে; সংক্ষেপে, এটি অনাবৃত কারণ এটি দিয়ে হাঁটা সহজ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.