একটি ভাল বিশ্ব মানচিত্র প্রজন্মের অ্যালগরিদম [বন্ধ] খুঁজছেন


98

আমি একটি সভ্যতার মতো খেলায় কাজ করছি এবং আমি পৃথিবীর মতো বিশ্বের মানচিত্র তৈরির জন্য একটি ভাল অ্যালগরিদম খুঁজছি। আমি কয়েকটি বিকল্প নিয়ে পরীক্ষা-নিরীক্ষা করেছি, তবে এখনও সত্যিকারের বিজয়ীর উপর আঘাত করতে পারি নি।

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

পার্লিন গোলমাল

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

এলোমেলো প্রসার

গ্রিড-ভিত্তিক মানচিত্রে তাদের সংখ্যা এবং আপেক্ষিক মাপের নিয়ন্ত্রণ বজায় রাখার সময় কি বাস্তবিক মহাদেশ তৈরির জন্য কোনও ভাল অ্যালগরিদম জানা আছে?


4
আমি দেখতে পাচ্ছি না যে 90+ আপভোট সহ একটি প্রাকৃতিক প্রশ্ন কেন বন্ধ করা উচিত। পুনরায় খুলতে ভোট।
জন কোলম্যান

উত্তর:


38

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

সম্পাদনা করুন: এটি করার আরেকটি উপায় এখানে একটি প্রয়োগের সাথে সম্পূর্ণ - গেমসের জন্য বহুভুজীয় মানচিত্র জেনারেশন


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

ধন্যবাদ আমি নিজেই এই দিকে যেতে প্রলুব্ধ হই - যখন আমার আরও কিছু ফ্রি সময় থাকবে ... :-)
ডেভিড জনস্টোন

4
একটি সস্তা কৌশল যা আপনি সর্বদা ব্যবহার করতে পারেন তা হ'ল গাণিতিক ক্রিয়ায় কোন "ভাল" মানচিত্রটি সংজ্ঞায়িত করা হয় এবং তারপরে দশটি এলোমেলো ছোটখাট পরিবর্তনগুলি তৈরি করা এবং তারপরে সর্বোত্তম ব্যবহার করা। এটি চালিয়ে যান এবং এটি আপনার পছন্দ মতো মানচিত্রের দিকে প্রস্থান করবে।
দাসচান্দি

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

আমি ওয়ান-টাইল বীজ পদ্ধতি ব্যবহার করছি। এতে আরও জটিল ভূখণ্ড যেমন কীভাবে পর্বতশ্রেণী যুক্ত করা যায় সে সম্পর্কে কোনও পরামর্শ?
একটি টিশকা

11

আমি আপনাকে ব্যাক আপ প্রস্তাব করছি এবং

  1. "ভাল" মহাদেশগুলি কী করে সে সম্পর্কে চিন্তাভাবনা করুন।
  2. একটি অ্যালগরিদম লিখুন যা কোনও খারাপ থেকে ভাল মহাদেশীয় লেআউট বলতে পারে।
  3. অ্যালগরিদমকে পরিমার্জন করুন যাতে আপনি একটি ভাল লেআউটটি কতটা ভাল তা নির্ধারণ করতে পারেন ।

একবার আপনার জায়গায় হয়ে গেলে, আপনি একটি অ্যালগরিদম প্রয়োগ করতে শুরু করতে পারেন যা এই আকারে আকার দেওয়া উচিত:

  • কৃপণ মহাদেশগুলি তৈরি করুন এবং তারপরে তাদের উন্নতি করুন।

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


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

4
পছন্দ করুন গ্রাফিক্সের সাহায্যে স্ক্রিনে কিছু, কিছু পেয়ে শুরু করা খুব কার্যকর হতে পারে । তারপরে আপনার ডান ব্রেইন কিছু কাজ শুরু করতে পারে।
লুসার droog

11

আমি আপনার নিজের মতো করে একটি সভ্যতার স্ক্রিনসেভার-স্টাইলের ক্লোনটির জন্য অনুরূপ কিছু লিখেছি। রেকর্ডের জন্য আমি এটি VB.net এ লিখেছি তবে আপনি যে প্রশ্নে ভাষা বা প্ল্যাটফর্ম সম্পর্কে কিছু উল্লেখ করবেন না আমি তা রাখব এটি বিমূর্ত।

"মানচিত্র" মহাদেশের সংখ্যা, মহাদেশের আকারের বৈকল্পিকতা উল্লেখ করে (উদাহরণস্বরূপ 1.0 সমস্ত মহাদেশকে একই আনুমানিক স্থলভাগের সাথে রাখবে, 0.1 এর নীচে বৃহত্তম মহাদেশের ভর 1/10 তম সহ মহাদেশগুলির অস্তিত্ব থাকতে পারে), সর্বাধিক জমির ক্ষেত্রফল (শতাংশ হিসাবে) উত্পাদন করতে এবং কেন্দ্রীয় ভূমির পক্ষপাত। একটি "বীজ" প্রতিটি মহাদেশের জন্য মানচিত্রের চারপাশে এলোমেলোভাবে বিতরণ করা হয়, কেন্দ্রীয় পক্ষপাত অনুসারে মানচিত্রের কেন্দ্রের দিকে ওজনযুক্ত (উদাহরণস্বরূপ একটি নিম্ন পক্ষপাত পৃথিবীর সাথে আরও অনুরূপ বিতরণকৃত মহাদেশগুলি উত্পাদন করে, যেখানে একটি উচ্চ কেন্দ্রীয় পক্ষপাত একটি এর চেয়ে বেশি মিলবে) পাঙ্গিয়া)। তারপরে বৃদ্ধির প্রতিটি পুনরাবৃত্তির জন্য, "বীজ" সর্বাধিক জমির ক্ষেত্রটি না পৌঁছানো পর্যন্ত বিতরণ অ্যালগরিদম অনুযায়ী (তারপরে আরও) ল্যান্ড টাইলস নির্ধারণ করে।

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

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


11

আমি জাভাস্ক্রিপ্টে আপনার প্রথম চিত্রের অনুরূপ কিছু তৈরি করেছি। এটি অতি পরিশীলিত নয় তবে এটি কাজ করে:

http://jsfiddle.net/AyexeM/zMZ9y/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<style type="text/css">
    #stage{
        font-family: Courier New, monospace;
    }
    span{
        display: none;
    }
    .tile{
        float:left;
        height:10px;
        width:10px;
    }
    .water{
        background-color: #55F;
    }
    .earth{
        background-color: #273;
    }
</style>
</head>

<body>


<div id="stage">

</div>

<script type="text/javascript">

var tileArray = new Array();
var probabilityModifier = 0;
var mapWidth=135;
var mapheight=65;
var tileSize=10;

var landMassAmount=2; // scale of 1 to 5
var landMassSize=3; // scale of 1 to 5


$('#stage').css('width',(mapWidth*tileSize)+'px');


for (var i = 0; i < mapWidth*mapheight; i++) {

    var probability = 0;
    var probabilityModifier = 0;

    if (i<(mapWidth*2)||i%mapWidth<2||i%mapWidth>(mapWidth-3)||i>(mapWidth*mapheight)-((mapWidth*2)+1)){

        // make the edges of the map water
        probability=0;
    }
    else {

        probability = 15 + landMassAmount;

        if (i>(mapWidth*2)+2){

            // Conform the tile upwards and to the left to its surroundings 
            var conformity =
                (tileArray[i-mapWidth-1]==(tileArray[i-(mapWidth*2)-1]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-mapWidth]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-1]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-mapWidth-2]));

            if (conformity<2)
            {
                tileArray[i-mapWidth-1]=!tileArray[i-mapWidth-1];
            }
        }

        // get the probability of what type of tile this would be based on its surroundings 
        probabilityModifier = (tileArray[i-1]+tileArray[i-mapWidth]+tileArray[i-mapWidth+1])*(19+(landMassSize*1.4));
    }

    rndm=(Math.random()*101);
    tileArray[i]=(rndm<(probability+probabilityModifier));

}

for (var i = 0; i < tileArray.length; i++) {
    if (tileArray[i]){
        $('#stage').append('<div class="tile earth '+i+'"> </div>');
    }
    else{
        $('#stage').append('<div class="tile water '+i+'"> </div>');
    }
}

</script>

</body>
</html>

4
খুব মার্জিত বাস্তবায়ন, আমি পছন্দ করি।
নাথানছের

ধন্যবাদ ছেলে !! এটা খুবই হালকা এবং সুন্দর
Liberateur

9

বহুভুজ মানচিত্র প্রজন্ম নিবন্ধে ভোরোনাই বহুভুজগুলি আনসিং করে ধাপে ধাপে মানচিত্রের প্রজন্মকে বর্ণনা করা হয়েছে।

এই লোকটি সমস্ত উত্স কোড দেয়। এটি ফ্ল্যাশ (অ্যাকশনস্ক্রিপ্ট 3 / ইসমাস্ক্রিপ্ট) তবে অন্য কোনও অবজেক্ট ওরিয়েন্টেড ভাষায় ট্রান্সপোসেবল

অথবা টেররাজের মতো কিছু ফ্র্যাক্টাল এনভায়রোনমেন্ট সফ্টওয়্যারগুলিতে প্রয়োগ করা অ্যালগরিদম ব্যবহার করার চেষ্টা করুন


5

খালি ভাবটা এখানেই ভাবছি:

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

জমির উপাদানগুলির উপর লুপ করুন এবং যেখানে তারা এখনও পরিকল্পিত আকারে নেই একটি বর্গ যোগ করুন। তবে মজাদার অংশটি প্রতিবেশী প্রতিটি উপাদানই এক হওয়ার সম্ভাবনাটি ওজন করে চলেছে। কিছু প্রস্তাবিত জিনিস যা এর কারণ হতে পারে:

  1. নিকটতম "অন্যান্য" জমির দূরত্ব। আরও ভাল প্রশস্ত মহাসাগর স্পেস উত্পাদন করে। কাছাকাছি আরও ভাল সংকীর্ণ চ্যানেল তোলে। আপনি সিদ্ধান্ত নিতে হবে আপনি বিটগুলিকেও একত্রে মেশাতে দেবেন কিনা।
  2. বীজ থেকে দূরত্ব। কাছাকাছি আরও ভাল বোঝা কমপ্যাক্ট জমি জনসাধারণ, আরও ভাল দীর্ঘ বিট বিট মানে
  3. সংলগ্ন ভূমি স্কোয়ারের সংখ্যা। অনেক সংলগ্ন স্কোয়ারের পক্ষে ওজন আপনাকে মসৃণ উপকূল দেয়, কয়েকটি পছন্দ করে আপনাকে প্রচুর পরিমাণে খাঁড়ি এবং উপদ্বীপ দেয়।
  4. কাছাকাছি "রিসোর্স" স্কোয়ারের উপস্থিতি? গেমের নিয়মের উপর নির্ভর করে, আপনি যখন রিসোর্স স্কোয়ার তৈরি করেন এবং আপনি যদি এটি সহজ করতে চান তবে।
  5. আপনি কি বিটগুলিকে খুঁটির সাথে যেতে বা যোগদানের অনুমতি দেবেন?
  6. ??? আর কি জানি না

যতক্ষণ না সমস্ত জমির জনগণ পরিকল্পিত আকারে না পৌঁছে বা কোনও কারণে আর বাড়তে পারে না।

লক্ষ্য করুন যে এই ওজনযুক্ত কারণগুলির পরামিতিটি ডিডলিং করার ফলে আপনি যে ধরণের পৃথিবী তৈরি করেছেন তা সুর করতে পারবেন যা সিআইভির কয়েকটি সম্পর্কে আমি পছন্দ করেছি feature

এইভাবে আপনাকে পৃথকভাবে প্রতিটি বিট অঞ্চলে উত্পাদন করতে হবে do


4

উচ্চতার মানচিত্রের মতো কিছু উত্পন্ন করতে আপনি কোনও হীরা স্কোয়ার অ্যালগরিদম বা পার্লিন শব্দ শুনতে পারেন। তারপরে, মানচিত্রে যা প্রদর্শিত হবে তার জন্য রেঞ্জের মানগুলি নির্ধারণ করুন। যদি আপনার "উচ্চতা" 0 থেকে 100 হয়, তবে 0 - 20 জল, 20 - 30 সৈকত, 30 - 80 ঘাস, 80 - 100 টি পর্বত তৈরি করুন। আমি মনে করি খাঁজটি মিনিক্রাফ্টে এর অনুরূপ কিছু করেছিল, তবে আমি কোনও বিশেষজ্ঞ নই, অবশেষে এটি কাজ করার পরে আমি কেবল একটি হীরা স্কোয়ার মানসিকতায় আছি।


3

আমি মনে করি আপনি এখানে "গতিশীল প্রোগ্রামিং" শৈলী পদ্ধতির ব্যবহার করতে পারেন।

প্রথমে ছোট সমস্যাগুলি সমাধান করুন এবং বড় সমস্যাটি সমাধানের জন্য স্মার্টলি সমাধানগুলি একত্রিত করুন।

A1= [elliptical rectangular random ... ]// list of continents with area A1 approx. 
A2= [elliptical rectangular random ... ]// list of continents with area A2 approx.
A3= [elliptical rectangular random ... ]// list of continents with area A3 approx.
...
An= [elliptical rectangular random ... ]// list of continents with area An approx.

// note that elliptical is approximately elliptical in shape and same for the other shapes.

Choose one/more randomly from each of the lists (An).

Now you have control over number and area of continents.

You can use genetic algorithm for positioning them 
as you see "fit" ;)

কিছু "গ্রাফ লেআউট আলগোরিদিম" একবার দেখে নেওয়া খুব ভাল হবে

আপনি আপনার উদ্দেশ্য অনুসারে এগুলি সংশোধন করতে পারেন।


3

টেকটোনিক প্লেটগুলির উত্তরের মতো মানচিত্র তৈরির জন্য আমার ধারণা ছিল। এটি এরকম কিছু হয়েছিল:

  1. গ্র্যান্ড স্কোয়ারগুলিতে ঝাঁকুনি যদি প্রতিটি বর্গকে একটি "জমি" বর্গ প্রদান করে তবে rnd <= 0.292 (গ্রহের পৃথিবীতে শুকনো জমির আসল শতাংশ)।
  2. প্রতিটি জমি এক এক বর্গ তার নিকটতম বৃহত প্রতিবেশীর দিকে স্থানান্তরিত করুন। প্রতিবেশীরা যদি ন্যায়সঙ্গত হয় তবে বৃহত্তর অংশের দিকে যান। খণ্ডগুলি সমান আকারের হলে, এলোমেলোভাবে একটি চয়ন করুন।
  3. যদি দুটি ল্যান্ড স্কোয়ার স্পর্শ করে তবে এগুলি এখন থেকে এখন পর্যন্ত সমস্ত স্কোয়ারকে এক হিসাবে সরিয়ে একটি গোষ্ঠীতে ভাগ করুন।
  4. পদক্ষেপ 2 থেকে পুনরাবৃত্তি করুন যখন সমস্ত খণ্ড সংযুক্ত থাকে তখন থামুন।

এটি 3 ডি স্পেসে মহাকর্ষ কীভাবে কাজ করে তার সমান। এটা বেশ জটিল। আপনার প্রয়োজনের জন্য একটি সহজ অ্যালগরিদম নিম্নলিখিত হিসাবে কাজ করবে:

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

এটি কীভাবে কাজ করে তা আমাকে জানান। আমি নিজে চেষ্টা করে দেখিনি।

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


2

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

আপনি যদি এর আগে তাদের সাথে কাজ না করে থাকেন তবে ধাতবগুলির একটি ভাল ব্যাখ্যা:

http://www.gamedev.net/page/resources/_//feature/fprogramming/exploring-metaballs-and-isosurfaces-in-2d-r2556


2

আমি যা ভাবছি তা এখানে, যেহেতু আমি উন্নয়নের একটি গেমের জন্য আমার এমন কিছু প্রয়োগ করতে চলেছি। :

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

এলোমেলোভাবে উত্পন্ন, অঞ্চলগুলি যৌক্তিক জলবায়ু সেটগুলি অর্পণ করে। গ্রিড অঞ্চলগুলি এলোমেলোভাবে নির্ধারিত হয়, উদাহরণস্বরূপ; সমুদ্র বা জমি গ্রিডগুলি তাদের গ্রিড অঞ্চল এবং জলবায়ুর উপর ভিত্তি করে মডিফায়ারগুলির সাথে এলোমেলোভাবে বায়োমগুলি অর্পণ করে, এগুলি হ'ল বন, মরুভূমি, সমভূমি, হিমবাহ, জলাভূমি বা আগ্নেয়গিরি। একবার এই সমস্ত বুনিয়াদি নির্ধারিত হয়ে গেলে, এলোমেলো শতাংশ ভিত্তিক ফাংশন যা টাইল সেটগুলিতে পূরণ করে ব্যবহার করে এটি একত্রে মিশ্রিত হওয়ার সময় time উদাহরণ স্বরূপ; যদি আপনার একটি বন বায়োম থাকে তবে মরুভূমির বায়োমের পাশে আপনার একটি অ্যালগোরিদম থাকে যা সম্ভবত টুডটি "বনাঞ্চল" হবে এবং এটি বাড়বে যে এটি "মরুভূমি" হ্রাস পাবে। সুতরাং, তাদের মধ্যে প্রায় অর্ধেক পথ, আপনি উভয় বায়োমগুলির মধ্যে কিছুটা মসৃণ রূপান্তর বন্ধ করার জন্য একজাতীয় মিশ্রিত প্রভাবিত করতে দেখবেন। এক গ্রিড জোন থেকে অন্যটিতে রূপান্তর সম্ভবত লজিক ল্যান্ডমাস ফর্মেশনগুলি বীমা করতে আরও কিছুটা কাজ নেবে ike উদাহরণস্বরূপ, একটি গ্রিড অঞ্চল থেকে একটি বায়োম যা অন্যের থেকে বায়োমকে স্পর্শ করে, তার পরিবর্তে সান্নিধ্যের উপর ভিত্তি করে একটি সরল শতাংশের পরিবর্তে। উদাহরণস্বরূপ, বায়োমের কেন্দ্র থেকে বায়োমের প্রান্ত পর্যন্ত 50 টি টাইল রয়েছে, যার অর্থ 50 টি রয়েছে যা এটি পরবর্তী বায়োমের কেন্দ্রে স্পর্শ করে। এটি যৌক্তিকভাবে একটি বায়োম থেকে পরেরটিতে 100% পরিবর্তন ছাড়বে। টাইলস দুটি বায়োমগুলির সীমানার নিকটবর্তী হওয়ার সাথে সাথে শতাংশটি প্রায় 60% বা আরও বেশি হয়ে যায়। আমি মনে করি, সীমান্ত থেকে অনেক দূরে বায়োমগুলি অতিক্রম করার সম্ভাবনা দেওয়া বুদ্ধিমানের কাজ হবে তবে আপনি চাইবেন যে সীমান্তটি কিছুটা মিশ্রিত হবে। গ্রিড অঞ্চলগুলির জন্য, শতাংশের পরিবর্তন আরও বেশি প্রকট হবে। % প্রায় %০% তে নেমে যাওয়ার পরিবর্তে এটি কেবল নেমে প্রায় ৮০% এ নেমে আসবে। এবং তারপরে একটি গৌণ চেক করা উচিত যাতে তা নিশ্চিত করার জন্য সমুদ্রের পাশের ল্যান্ড বায়োমের মাঝখানে কোনও যুক্তি ছাড়াই এলোমেলো জলের টালি নেই। সুতরাং, হয়, জলের টাইল বোঝাতে একটি চ্যানেল তৈরি করতে, বা এটি পুরোপুরি মুছে ফেলতে সেই পানির টালিটিকে সমুদ্রের ভর দিয়ে সংযুক্ত করুন। জল ভিত্তিক বায়োমে জমি শিলা আউটক্রপ এবং এর ব্যবহারের মাধ্যমে ব্যাখ্যা করা সহজ।

ওহ, কিন্ডা বোবা, দুঃখিত।


এই যে! আমি কিছু গবেষণা করছি যখন আমি কোনও মানচিত্র তৈরি করার চেষ্টা করছিলাম .. এবং আমি ঠিক কীভাবে আপনার বর্ণনা দিয়েছিলাম তা বাস্তবায়ন করতে চলেছি। কৌতূহলের বাইরে কীভাবে তা বেরিয়ে গেল?
ভিভিয়ানলগার

1

আপনি কিছু লেআউট অনুসারে ফ্র্যাক্টাল অঞ্চল স্থাপন করতেন যা আপনি জানেন "কাজগুলি" (উদাহরণস্বরূপ 2x2 গ্রিড, ডায়মন্ড ইত্যাদি) কিছুটা জিটারের সাথে) তবে মহাসাগর কেন্দ্রগুলির প্রান্তগুলির দিকে একটি গাউসিয়ান বিতরণ স্যাঁতসেঁতে শিখরগুলি দিয়ে। জলের স্তরটি নীচে রাখুন যাতে বেশিরভাগ স্থল হয় যতক্ষণ না আপনি প্রান্তগুলির কাছে পৌঁছান।

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