কার্যত দ্বীপে অঞ্চলগুলি উত্পাদন করে


29

আমার কাছে বর্তমানে দ্বীপগুলি দেখতে এরকম দেখাচ্ছে:

দ্বীপ

এবং আমি প্রক্রিয়াগতভাবে এটির মতো অঞ্চলে বিভাগ করতে চাই:

অঞ্চল সহ দ্বীপ

আমি যা খুঁজছি তা কি অ্যালগরিদম করে? নীচের চিত্রের মতো কীভাবে সুসংগত অঞ্চল তৈরি করবেন সে সম্পর্কে আপনার কাছে কি পরামর্শ আছে? আপনার সাহায্য প্রশংসা করা হয়।


আপনি প্রথম স্থানটিতে এই দ্বীপটির চিত্রটি কীভাবে পেলেন? আপনি কি এটি তৈরি করেছেন এবং যদি তাই হয় তবে কীভাবে আপনি এটি অর্জন করেছেন?
ভাইলানকোর্ট

আমি এটি একটি অনলাইন মানচিত্রের জেনারেটর থেকে পেয়েছি।
ডমিসুম

আমার উত্তর আপডেট করতে দেরি করার জন্য দুঃখিত - মূল পরিকল্পনার চেয়ে বাড়ীতে আসতে আরও বেশি সময় লেগেছে। আমি কিছু চিত্র ও লিঙ্ক যুক্ত করেছি।
পিকালেক

যদি আপনি এটি কোনও অনলাইন জেনারেটর থেকে পেয়ে থাকেন তবে আপনার আজগারের ফ্যান্টাসি মানচিত্র জেনারেটরের দিকে নজর দেওয়া উচিত । এতে কাস্টমাইজযোগ্য প্যারামিটার সহ অঞ্চল এবং নাম রয়েছে এবং ডাব্লুবিএসই হ্যালো বলেছে। এটি একটি গিথুব, সুতরাং আপনি তাদের কোডটি পরীক্ষা করতে পারবেন।
অ্যানোপ্লেক্সিয়ান - মনিকা

উত্তর:


40

বাস্তব বিশ্বে এই প্রাদেশিক সীমানাগুলি প্রায়শই নদীর মতো ভূতাত্ত্বিক বৈশিষ্ট্যগুলি অনুসরণ করবে।

সুতরাং সম্ভবত একটি ভাল পদ্ধতির দ্বীপের ভূতত্ত্বের মডেল করা এবং সীমান্তগুলি এড়িয়ে যেতে পারে?

রেড ব্লব গেমসের দুর্দান্ত দেখানোর ফলাফল সহ এই বিষয়ে কিছু ভাল নিবন্ধ রয়েছে।

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

তাঁর সাইটে থাকা অন্যান্য নিবন্ধগুলি দেখুন, তিনি মানচিত্রের প্রজন্মের বিষয়ে প্রচুর লেখালেখি করেছেন ।

দ্বীপ


3
নোট করুন যে বাস্তব বিশ্বে রাজনৈতিক বা প্রশাসনিক বিভাগেও মাঝে মাঝে স্বেচ্ছাসেবী বিভাগ থাকে, সাধারণত সরলরেখা থাকে (যেমন ল্যাটিডুড / দ্রাঘিমাংশের রেখা বরাবর, পর্বতের শিখরের মাঝে লাইন ইত্যাদি)।
পাবলো এইচ

2
@ পাবলোএইচ পয়েন্ট, যদিও সোজা সীমানা পোস্ট-মিডিয়াওয়াল colonপনিবেশিক যুগের ঘটনা বলে মনে হয়। তবে যেহেতু আমরা ওপিএস সমস্যার সেটিংটি জানি না, তাই এটি প্রাসঙ্গিক হতে পারে
সেন্ট্রি

27

আমি ভেরোনাই চিত্রের দুটি পাস দিয়ে এই সমস্যাটি সমাধান করব:

প্রথম পাস: অঞ্চল বিভাজন

দ্বীপটিকে অঞ্চলগুলিতে মোটামুটি বিভক্ত করতে প্রথম পাসটি পয়েন্টগুলির কিছুটা বিচ্ছিন্ন বিতরণ (যেমন পয়েন্টগুলির মধ্যে দূরত্ব তুলনামূলকভাবে বড় হওয়া উচিত) ব্যবহার করবে (পয়েন্ট জেনারেশন সম্পর্কে নীচের নোটটি দেখুন)। পরবর্তী এই পয়েন্টগুলির উপর ভিত্তি করে একটি ভোরোনাই চিত্র তৈরি করুন। এটি দ্বীপটিকে প্রতিটি পয়েন্টের চারপাশে বহুভুজ অঞ্চলে বিভক্ত করবে নীচের মত:

এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয় পাস: সীমান্ত র্যান্ডমাইজেশন

এখন যে দ্বীপটি অঞ্চলগুলিতে বিভক্ত হয়ে গেছে, তারপরে পরবর্তী পদক্ষেপটি তাদের মধ্যকার সীমানা 'রুট আপ' করা। এটি করার জন্য, পয়েন্টগুলির আরও কমপ্যাক্ট বিতরণ ব্যবহার করে পয়েন্টগুলির একটি নতুন স্তর তৈরি করুন (অর্থাত পয়েন্টগুলির মধ্যে দূরত্বটি ছোট হওয়া উচিত) এবং আবার এই পয়েন্টগুলি ব্যবহার করে অন্য ভোরোনাই চিত্রটি তৈরি করুন। প্রতিটি ছোট অঞ্চলের জন্য, এর 'বীজ' বিন্দুটি পরীক্ষা করে এটি একটি বৃহত্তর অঞ্চলে নির্ধারণ করুন। এর ফলে বৃহত্তর মহকুমার মধ্যে আরও কৌটা সীমানা তৈরি হবে। উভয় জায়গায় ভোরোনাই চিত্রের সাথে দেখতে দেখতে এটির কাছাকাছি অবস্থান রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

এবং এখানে একই ক্ষেত্রটি কেবল চূড়ান্ত সীমানা দেখায়:

এখানে চিত্র বর্ণনা লিখুন

পয়েন্ট জেনারেশন সম্পর্কে মন্তব্য

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

এই পদ্ধতির সাথে একটি সম্ভাব্য সমস্যা হ'ল প্রথম পাস পার্টিশনটি কিছু খুব ছোট অঞ্চল তৈরি করতে পারে। যদি আপনি তাদের আপনার চূড়ান্ত ফলাফলে না চান তবে আমি কেবল এগুলি এলোমেলো সংলগ্ন অঞ্চলে একীভূত করব।

চূড়ান্ত নোটস

আমি যে চিত্রগুলি সরবরাহ করেছি তা রাস্টার ইমেজ হতে পারে তবে এই কৌশলটি বহুভুজ / ভেক্টর উপস্থাপনার পাশাপাশি কাজ করে।


1
প্রক্রিয়াজাতীয় তল পরিকল্পনাগুলির জন্য এটি আমি যা করি, অঞ্চলের (দ্বীপ) অভ্যন্তরের পয়েন্টগুলি থেকে ভোরোনাই চিত্রটি তৈরি করুন, গ্রিডটি তৈরি করুন (এটি আয়তক্ষেত্রাকার হতে হবে না, আপনার ক্ষেত্রে একটি বিকৃত গ্রিড রয়েছে) যা একই অঞ্চলকে ঘিরে রাখে, তারপরে গ্রিড এবং ভোরোনাইয়ের বুলিয়ান ছেদগুলি গণনা করুন, অঞ্চলগুলি গণনা করুন এবং একটি ডেটা ট্রিতে তালিকাবদ্ধ করুন (তালিকা, জ্যাজেড অ্যারে ইত্যাদির তালিকা ... আপনার পছন্দ অনুযায়ী যে কোনও ডেটা স্ট্রাকচার পছন্দ করুন) সর্বনিম্ন গ্রিড কোষের ০..6 শতাংশ অনুযায়ী, আপনি কিছু অনুপস্থিত ঘর পেয়ে যাবেন, তবে আপনি আপনার গাছে থাকা গ্রিডটি মূলের সাথে তুলনা করতে পারেন এবং আপনার গাছটিতে পুনরায় সাইন ইন করতে পারেন।
ফিলিপ গুতেরেস

আপনি ছবি যোগ!
ফিলিপ গুতেরেস

4

মাইনক্রাফ্ট এটি দুর্দান্তভাবে করে এবং এর বিশ্ব প্রজন্মের অ্যালগরিদম বিশ্লেষণ ও ডকুমেন্ট করা হয়েছে।

অ্যালগরিদমের বিভিন্ন বর্ণনা রয়েছে, সেগুলির একটি এখানে: https://github.com/Un علومShadow200/ClassiCube/wiki/Minecraft- ক্লাসিক- ম্যাপ- জেনারেশন- অ্যালগোরিদম

অ্যালগরিদমের মূলটি হ'ল পার্লিন শব্দ শব্দ জেনারেটর । এটি সরাসরি উচ্চতা নিয়ন্ত্রণ করে (কমবেশি, যেমন গুহাগুলি তৈরির পরবর্তী পদক্ষেপটি তলকেও পরিবর্তন করতে পারে) পাশাপাশি বায়োম জেনারেশনও নিয়ন্ত্রণ করে। বায়োম জেনারেটরের মতো কিছু সম্ভবত আপনি নিজের অঞ্চলগুলি তৈরি করতে ব্যবহার করতে চান।

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

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


4

একটি সাধারণ অ্যালগরিদম ব্যবহৃত হয়, উদাহরণস্বরূপ, আজগার দ্বারা ( উত্স কোড) ) দ্বারা। মোটামুটি এই মত:

  1. আপনার ল্যান্ডমাসকে ছোট ছোট অঞ্চলে বিভক্ত করুন, উদাহরণস্বরূপ ডেলাউনি ট্রায়াঙ্গুলেশন বা ভোরোনাই কোষের মাধ্যমে।
  2. নির্ধারণ করুন (এলোমেলোভাবে বা অন্যথায়) আপনার সংস্কৃতি, রাজ্য, ধর্ম বা আপনি যা যা অনুকরণ করতে চান তার জন্য "শুরু" অবস্থানগুলি।
  3. (এলোমেলোভাবে বা অন্যথায়) তাদের প্রত্যেকের জন্য একটি "বৃদ্ধির কারণ" নির্ধারণ করুন। আপনার যে বৃদ্ধির কারণগুলির মধ্যে তত বেশি পার্থক্য রয়েছে, আপনার চূড়ান্ত মানচিত্রটি তত কম uniform
  4. এখন আপনার ক্ষেত্রগুলি (ইত্যাদি) নিয়ে পুনরাবৃত্তি করুন এবং বৃদ্ধির ফ্যাক্টরের উপর নির্ভর করে পুরো মানচিত্রটি পূরণ না হওয়া পর্যন্ত এগুলি আশেপাশে, খালি টাইলগুলিতে ছড়িয়ে দিন।
  5. আপনি সম্ভবত কিছুটা সীমানা সোজা করে শেষ করতে চান, এমন কক্ষগুলি স্যুইচ করে যা তাদের নিজস্ব রঙে কেবল এক প্রতিবেশী এবং অন্যথায় সেই রঙের সাথে আলাদা থাকে।

3

আপনি যদি রাস্টার ভিত্তিক পদ্ধতির পরিবর্তে ভেক্টোরিয়াল ফর্ম্যাটে এটি করতে আগ্রহী হন তবে আমি বেশ কিছুটা আগে এই সম্পর্কে একটি ব্লগ পোস্ট লিখেছি।

http://blog.particracy.com/worlds-and-their-geography/

ধারণাটি হ'ল আপনি জাল দিয়ে শুরু করেছেন (সাধারণত ভোরোনোই ভিত্তিক) এবং এলোমেলোভাবে বীজযুক্ত পয়েন্টগুলি থেকে অঞ্চলগুলি কেন্দ্রীভূতভাবে বৃদ্ধি করুন যা যথেষ্ট পরিমাণে দূরে রয়েছে।


2

কী মজার প্রশ্ন :) এই পদ্ধতিরটি ভার্নোই কোষের উপর ভিত্তি করে কিন্ত দূরত্বের মেট্রিকটি খুব ইউক্লিডিয়ান নয় (আমি ২.০ এর পরিবর্তে 1.5 এর শক্তি ব্যবহার করেছি) এবং এতে কিছুটা এলোমেলোভাবে তৈরি হয়েছে। এটি জলের উপর দিয়ে লাফিয়ে উঠতে পারে যা আদর্শ নয়।

আরও আকর্ষণীয় আকার পেতে আশেপাশের অঞ্চলগুলিকে একত্রে একত্রিত করা যেতে পারে, এখানে আমি এটি নির্ধারণ করতে নিকটতম প্রতিবেশী N ব্যবহার করি।

আপনি যদি আগ্রহী হন তবে আমি আরও বিশদে যেতে পারি এবং পাইথন কোডটি ভাগ করতে পারি।

মানচিত্র 1 মানচিত্র 2

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.