ফ্র্যাক্টাল-ভিত্তিক পদ্ধতিগত নগর বিন্যাসের জন্য একটি ভাল অ্যালগরিদম কী?


19

পটভূমি

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

বিল্ডিংগুলিতে নিজেরাই ঘনক্ষেত্র বা আয়তক্ষেত্রাকার পদাঙ্কগুলি থাকবে যা 3 টি ব্লকের সমস্ত গুণকের মতো একটি নির্দিষ্ট বেস কিউবের উপর ভিত্তি করে তৈরি হয়। রাস্তার গুরুত্বের উপর নির্ভর করে ভবনগুলির মধ্যে রাস্তাগুলি এবং দূরত্বগুলি সাধারণত 5-11 ব্লক প্রশস্ত হবে।

আমি যখন শহরের জন্য পরিকল্পনা শুরু করব তখন আমি ঠিক জানব যে আমি কত বড় বড় ইমারত তৈরি করতে চাই এবং সেখানে কতগুলি থাকবে।

সমস্যাটি

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

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

প্রশ্নটি

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

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

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

সম্পাদনা স্পষ্ট করে বলতে গেলে, আমি ঠিক এই মুহুর্তে বিন্যাসটি সন্ধান করছি কারণ ভবনগুলি নকশাকৃত এবং গেমটিতে নির্মিত হবে।


3
মাইনক্রাফ্ট ফ্র্যাকটাল ব্যবহার করে? আমি ছাপে ছিলাম এটি কেবল অবিচ্ছিন্ন শব্দ ফাংশন ব্যবহার করে (পার্লিন বা সিম্প্লেক্স, আমি বিশ্বাস করি)।
মার্টিন সোজকা

@ মার্টিন সোজকা পার্লিন শব্দ আসলে একটি ভঙ্গুর, তাই সেখানে।
কিছু মনে রাখবেন না

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

@ নেভারমাইন্ড পার্লিন শব্দটি আসলে একটি ফ্র্যাক্টাল নয়, তবে ব্রাউনিয়ান গতি (যা পার্লিন শব্দকে ব্যবহার করতে পারে এমন একটি কৌশল) একটি ফ্র্যাক্টাল এবং সাধারণত পার্লিন শব্দ হিসাবে পরিচিত as
এলভা

হ্যাঁ, দুঃখিত, আমি সবসময় লোকদের সংশোধন করি যখন তারা পার্লিন শব্দ এবং গোলাপী গোলমালকে বিভ্রান্ত করে, তবে এখানে আমি নিজেই একই ভুল করছি। আমার একমাত্র প্রতিরক্ষা হ'ল মাইনক্রাফ্ট আসলে গোলাপী (ব্রাউনিয়ান গতি) শব্দটিও ব্যবহার করে, আইআইআরসি।
কিছু মনে রাখবেন না

উত্তর:


20

আমি সম্প্রতি একটি প্রক্রিয়াভিত্তিক নগর বিন্যাসের জন্য একটি অ্যালগরিদম বাস্তবায়ন করেছি। এটি এখনও অনেক কাজ চলছে, তবে আমার কাছে এটি আশাব্যঞ্জক। এটা দেখ:

পদ্ধতিগত শহরের উদাহরণ

এই লেআউটটি তৈরি করতে ব্যবহৃত অ্যালগরিদম আলগাভাবে L- সিস্টেমের উপর ভিত্তি করে । আমার একটি বেস Elementক্লাস রয়েছে, এটিতে একটি আয়তক্ষেত্র রয়েছে যার অবস্থানটি মানচিত্রে চিহ্নিত করা হয় এবং একটি পদ্ধতি রয়েছে Growযা Elementsআয়তক্ষেত্রের অভ্যন্তরে অন্যটি তৈরি করে এবং / অথবা মানচিত্রে কিছু বস্তু তৈরি করে। এরপর প্রকৃত উপাদান, এই বেস ক্লাস থেকে উত্তরাধিকার সুত্রে প্রাপ্ত হয়: City, Street, Buildingইত্যাদি

প্রজন্মটি অনেকগুলি "বীজ" অবজেক্ট দিয়ে শুরু হয় (আমার ক্ষেত্রে, Cityমানচিত্রে এলোমেলোভাবে রাখা একটিমাত্র উপাদান)। তারপরে Growসমস্ত উপাদানগুলি নিষ্ক্রিয় ( Growরিটার্ন false) হয়ে না যাওয়া বা কিছু সংখ্যক পুনরাবৃত্তি পাস না হওয়া অবধি সিস্টেমটি সমস্ত উপাদানগুলিতে কল করে calling

ছবির শহরটি কয়েকটি কয়েকটি সাধারণ নিয়ম ব্যবহার করে নির্মিত হয়েছে:

  • CityStreetঅঞ্চলটিকে কোথাও বিভক্ত করার উপাদান হয়ে যায় ।
  • সকল Streetগুলি 0-3 পাশ রাস্তায়, আরও বিভাজন এলাকা হত্তয়া।
  • এছাড়াও, Streets অবিচ্ছিন্নভাবে Buildingপাশে এলোমেলো আকারের ফিট করার চেষ্টা করুন ।

ফলাফল মারাত্মক আকর্ষণীয় নয়, তবে খারাপও নয়। সিস্টেমটি সহজেই প্রসারিত করা যেতে পারে এবং কী চলছে তা বোঝার জন্য যথেষ্ট সহজ (-8)


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

আমি এটা পছন্দ করি. =) এখন পিগমে বাস্তবায়নের জন্য ...
কেন

8

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

গুগলিং "পদ্ধতিগত বিল্ডিংগুলি" বা "পদ্ধতিগত শহর" আপনাকে এই বিষয়ে বেশ কয়েকটি অন্যান্য কাগজপত্র এবং নিবন্ধও দেবে।


1

আমি কিছুক্ষণ আগে প্রক্রিয়াজাতীয় শহরগুলি তৈরি করার জন্য খুব ভাল / বিশদ টিউটোরিয়াল জুড়েছিলাম। একটি ভিডিও আছে @ http://www.youtube.com/watch?v=-d2-PtK4F6Y টিউটোরিয়ালটি লেখকের ব্লগে রয়েছে: http://www.shamusyoung.com/twentysidedtale/?p=2940 আশা করি এটি সাহায্য করবে amb


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