একটি হেক্স মানচিত্রে সমান অঞ্চল তৈরি করুন


13

উদাহরণস্বরূপ একটি বৃহত (এক্স বাই ওয়াই) হেক্স মানচিত্রটি গ্রহণ করে, আমি কীভাবে এটিকে সংযুক্ত হেক্সেসের এন অঞ্চলে দেশগুলিকে অনুকরণ করতে ভাগ করতে পারি?

লক্ষ্যটি হ্যাক্স মানচিত্র তৈরি করা যা বিভিন্ন আকারের কিন্তু সমান আকারের দেশগুলির সাথে বাস্তব জীবনের মানচিত্রের মতো দেখায়।

উত্তর:


13

আপনি কি লয়েডের অ্যালগরিদম চেষ্টা করেছেন ? পদ্ধতিটি বেশ সহজ, এবং মোটামুটি নিয়মিত দেখার অঞ্চলগুলি তৈরি করবে (আপনি কতগুলি পুনরাবৃত্তি চালান তার উপর নির্ভর করে)।

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

একটি সুন্দর চেহারার মানচিত্র তৈরি করতে আপনাকে খুব বেশি দিন চালাতে হবে না। এই উদাহরণের জন্য কেবল তিনটি পুনরাবৃত্তি প্রয়োজন।


অত্যন্ত চমৎকার, এবং একটি উদাহরণ বিশেষত থাকার জন্য +1, কিন্তু আমি একটু চিন্তিত যে এই একটু হয় হতে চাই খুব নিয়মিত! এটি বলেছিল, ফলাফলগুলি সত্যই সেই স্কেলগুলিতে খুব সুন্দর লাগছে এবং এটি অন্যান্য পদ্ধতির বীজের একটি দুর্দান্ত উপায়।
স্টিভেন স্টাডনিকি

1
আমার উদাহরণ বহুভুজ মানচিত্র উত্পন্ন সম্পর্কে একটি ব্লগ পোস্ট দ্বারা অনুপ্রাণিত হয়েছিল । আরও ঝাঁকুনিযুক্ত চেহারা তৈরি করতে লেখক প্রতিটি অঞ্চলের প্রান্তগুলিতে কিছুটা আওয়াজ যোগ করেছেন (এটি দেখতে নীচে স্ক্রোল করুন)। এটিকে একটি व्यवहार्य বিকল্প হিসাবে তৈরি করার জন্য আপনার চেয়ে অনেক বেশি হেক্সস ব্যবহার করা দরকার তবে এটি অবশ্যই কার্যকর।
মাইকেল ক্রিস্টোফিক

3

আপনি চেষ্টা করতে পারেন একটি সহজ উপায়।

  1. এলোমেলোভাবে nহেক্সেস নির্বাচন করুন । প্রত্যেকে একটি গ্রুপ শুরু করবে।
  2. প্রতিটি গ্রুপের জন্য এলোমেলো দিকের প্রাথমিক হেক্সটি প্রসারিত করার চেষ্টা করুন।
  3. যদি নির্বাচিত হেক্সের চারপাশে সমস্ত হেক্সস দখল করা থাকে তবে টেপযুক্ত হিসাবে চিহ্নিত করুন, হেক্স পরিবর্তন করুন।
  4. প্রতিটি গোষ্ঠী 20 হেক্স দীর্ঘ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন বা প্রসারিত করার মতো আর জায়গা নেই (সমস্ত হেক্সস আলতো চাপানো হয়েছে)।

আমি পরীক্ষা করিনি তবে এর দ্বীপপুঞ্জ তৈরি করা উচিত এবং কিছুটা দীর্ঘ পাতলা ধনুর্বন্ধনী এড়ানো উচিত। এছাড়াও, সম্ভবত প্রতিবেশীদের সীমানা থাকবে তবে অগত্যা নয় যে প্রত্যেকে একে অপরের সংস্পর্শে থাকবে, সেই ঘনত্বের মান নির্ভর করবে n
কিছু গোষ্ঠী অন্যরাও কোণঠাসা হয়ে থাকতে পারে এবং 20 টিরও কম আকারে পৌঁছতে পারে, আপনি একে অপরের ন্যূনতম দূরত্বে স্টার্টার হেক্সেসের স্পোং করে বর্ধিত স্থান নিশ্চিত করতে পারেন।
প্রয়োজন অনুসারে পরীক্ষা এবং টুইট করুন।


এছাড়াও, এই সমস্যার সাথে সম্পর্কিত নয় তবে হেক্সেসের সাথে কাজ করার জন্য খুব দরকারী, এই পৃষ্ঠাটি দেখুন: http://www.redblobgames.com/grids/hexagons/#basics
এটি একক স্থানে হেক্স তথ্য সম্পর্কিত পুরো গুচ্ছকে একত্রিত করে একটি দুর্দান্ত দৃশ্য।


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

আমি ভাবছি সম্ভবত একবারে একটি দেশ শুরু করতে হবে, প্রথমে কোণার দল গঠন করুন, তারপরে প্রান্তগুলি আমার যা চাইবে তা দেবে। আমি বাড়িতে এলে চেষ্টা করব।
ম্যাডটেকপিটি

@ বাইট 56 হ্যাঁ, আমি আমার মধ্যাহ্নভোজনের সময় কিছুটা আসলে এরকম কিছু ভেবেছিলাম। কোণযুক্ত গোষ্ঠীটির কোথাও বেড়ে ওঠার জন্য, এটি কেবলমাত্র অন্য গ্রুপের একটি হেক্সস নেবে এবং সেই গোষ্ঠীকে পরবর্তী পুনরাবৃত্তিতে একটি ফাঁকা জায়গা খুঁজে পেতে দেয়। যদিও একে অপরকে অসীমভাবে বধ করার জন্য 2 কোণযুক্ত গ্রুপ এড়ানোর জন্য এটির কিছু সুরক্ষার ব্যবস্থা থাকা উচিত।
পিটারওয়াজ

বাস্তব দেশগুলির প্রায়শই নদী বা পর্বতের সীমানা থাকে। আপনি যখন এলোমেলোভাবে প্রসারিত করছেন, আপনি পরবর্তী হেক্স নদীর তীরে বা একটি পর্বতশৃঙ্গের পাশের অংশে থাকলে প্রসারণের সম্ভাবনা হ্রাস করার চেষ্টা করতে পারেন।
amitp

@ এমআইটিপি যদি ওপি এই উপাদানগুলির হিসাব হওয়ার আশা করছিল তবে তিনি সম্ভবত সেগুলি উল্লেখ করেছিলেন। আমি ধরে নিচ্ছি না, কেবল আসল প্রিমিসের ভিতরে কাজ করছি।
পিটারওয়াজ

2

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

আমার মাথার শীর্ষে, আমি একটি পয়েন্ট বাছাই এবং সেখান থেকে বাহিরের দিকে এগিয়ে যাওয়ার পরামর্শ দেব, আপনার "ক্রমবর্ধমান দেশ" এর মধ্যে একটি এলোমেলো টাইল বাছাই যা দেশের অংশ নয় adj

আপনি কী ধরণের দেশ দেখতে চান তার উপর নির্ভর করে অ্যালগরিদমগুলি স্যুইচ আউট করার জন্য একটি কৌশল প্যাটার্ন ব্যবহার করা যেতে পারে। http://en.wikedia.org/wiki/Strategy_ Pattern অর্থাত আপনি চিলির মতো পাতলা উপকূলীয় দেশ চান? অথবা আপনি কি এমন কিছু চান যা আরও গোল এবং অন্তর্ভুক্ত থাকে?

গ্রাফের বৈশিষ্ট্যগুলি আপনাকে শেষ "দেশ" এর মতো দেখতে চাইলে কৌতুক দেওয়ার অনুমতি দিতে পারে: http://en.wikedia.org/wiki/Eccentricity_(راف_theory)

একটি বড় দেশ চান? গ্রাফের বৈশিষ্ট্যগুলি টুইঙ্ক করুন এবং উত্পন্ন দেশটিকে (যা কেবল একটি গ্রাফ) জোর করে এমন বৈশিষ্ট্যগুলি দিতে বাধ্য করুন যা এটি আপনাকে "চেহারা" দেয়।

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


2

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

সমস্যাটির বিষয়ে আমার প্রাথমিক পন্থাটি হবে আপনার অঞ্চলগুলিকে 'বিকশিত' ('বাড়ানোর' চেয়ে):

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

এখন, যতক্ষণ আপনি চান নিচের সিউডোকোডটি চালান:

Pick a random hex A from the boundary list;
Pick a random neighbor B of this hex from a different country;
if (A's country has more hexes than B's country has) {
  change hex A to belong to B's country;
} else if (B's country has more hexes than A's country has) {
  change hex B to belong to A's country;
} else {
  flip a coin to decide which to change;
}
if ( the changed hex's old country has become disconnected ) {
  undo and reject this move;
} else {
  update the boundary list around the changed hex and its neighbors;
}

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

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

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

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