পদ্ধতিগতভাবে শহরগুলি উত্পন্ন করতে এল-সিস্টেমগুলি ব্যবহার করা


10

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



এল-সিস্টেমের জন্য +1 হুররে !
লুসার droog

আমি অনুরূপ কিছু করার একটি উপায় ছিল ছেদগুলি প্রতিনিধিত্বকারী নোডগুলির একটি গ্রিড তৈরি করা, তারপরে এলোমেলোভাবে সংলগ্ন নোডগুলি সংযুক্ত করা। গোলকধাঁধার মতো লেআউট তৈরি করে তবে রাস্তাগুলি সমস্তই সংযুক্ত থাকে না, সুতরাং প্রকৃতপক্ষে নেভিগেট করা সম্ভব নয়।
ব্যবহারকারী 137

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

উত্তর:


20

এল-সিস্টেমগুলি , যা আমি বলতে পারি * থেকে, ব্যাকরণের মতো বিকল্প ব্যবস্থার একটি সেট যা আপনি আকর্ষণীয়, "জৈব" ফলাফল পেতে পুনরাবৃত্তভাবে প্রয়োগ করতে পারেন।

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

variables : | o              (these are the things that will grow)
start  : o
         |                   (this is what we start with)
rules  : (o  o   o)         (these are the substitution rules that we apply
               \ /            one step at a time)

1 প্রজন্মের সময়, আমরা সবে শুরু করেছি:

o
|

প্রজন্ম 2 এ, আমরা প্রতিটি বিধি অনুসরণ করি এবং বিদ্যমান অংশগুলি বিধি অনুসারে প্রতিস্থাপন করি। আমরা "বল" দুটি "দুটি স্টিক এবং বল" দিয়ে প্রতিস্থাপন করি:

o   o
 \ /
  |

প্রজন্ম 3:

o o   o o
 \|   |/
   \ /
    |

শীঘ্রই আমরা একটি সুন্দর (কৃপণ) বড় গাছ পাব!

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

recursively:

tree = start
grow(tree, start)

func grow(tree, part)
    if this part of the tree is big enough
        stop
    if part is 'o'
        replace part with 'o\/o'
        grow(tree, the left 'o')
        grow(tree, the right 'o')

iteratively:

tree = start
for a number of iterations
    for each part in tree
        if part is 'o':
            replace with 'o\/o'

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

variables: block_vertical block_horizontal road_vertical road_horizontal
start: block_vertical
rules: (block_vertical  block_horizontal road_vertical block_horizontal)
       (block_horizontal  block_vertical road_horizontal block_vertical)

এটি এক মিনিটের মধ্যে বোঝা যাবে।

প্রজন্ম 1:

+--------------------+
|                    |
|                    |
|                    |
|        V           |
|                    |
|                    |
|                    |
+--------------------+

একটি একক, বিরক্তিকর উল্লম্ব ব্লক। (ভিটি দাঁড়া উল্লম্ব।)

প্রজন্ম 2: আমরা মাঝখানে উল্লম্ব রাস্তা সহ অনুভূমিক ব্লকগুলির সাথে উল্লম্ব ব্লকটি প্রতিস্থাপন করি

+--------------------+
|       r            |
|       r            |
|       r            |
|   H   r      H     |
|       r            |
|       r            |
|       r            |
+--------------------+

আর রাস্তা দাঁড়িয়েছে! আমি এলোমেলোভাবে বিভাজনটি ছড়িয়ে দিয়েছি, আমরা পিসিজিতে নিয়মিত বিরক্তিকর অংশগুলি চাই না।

প্রজন্ম 3: আমরা অনুভূমিক ব্লকগুলি অনুভূমিক রাস্তাগুলির সাথে পৃথক করে উল্লম্ব ব্লকগুলি প্রতিস্থাপন করি। বিদ্যমান রাস্তাগুলি স্থায়ী; তাদের জন্য কোন বিধি নেই।

+--------------------+
|   V   r            |
|       r            |
|rrrrrrrr            |
|       r      V     |
|   V   r            |
|       rrrrrrrrrrrrr|
|       r      V     |
+--------------------+

রাস্তাগুলি একে অপরের সাথে কীভাবে সংযুক্ত হয় তা লক্ষ করুন which এটি যথেষ্ট বার পুনরাবৃত্তি করুন এবং আপনি এরকম কিছু দিয়ে শেষ করবেন (স্পষ্টভাবে সম্পর্কিত উত্তরটি ছিঁড়ে ফেলে ):

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

লক্ষ্য করুন যে আমি প্রচুর বিবরণ coveredাকেনি, এবং এই ফলাফলটি "স্পষ্টতই" উত্পন্ন দেখায় - বাস্তব শহরগুলি কিছুটা আলাদা দেখায়। এটিই পিসিজি মজাদার / শক্ত করে তোলে। আপনার ফলাফলগুলি টুইট করতে এবং উন্নত করতে অবিরাম কিছু করতে পারেন তবে এল-সিস্টেমের সাথে সম্পর্কিত না থাকায় আমি এই উত্তরটি এখানে রেখে যাব; আশা করি এটি আপনাকে শুরু করতে সহায়তা করে।

* - আমি আনুষ্ঠানিকভাবে এল-সিস্টেমগুলি অধ্যয়ন করি নি, যদিও আমি ব্যাকরণ এবং পিসিজি উদ্ভিদের মতো নির্দিষ্ট ধরণের মুখোমুখি হয়েছি; যদি আমি কোনও সংজ্ঞা বা ধারণা ভুল পাই তবে আমাকে সংশোধন করুন


1

@ কনগাসবঙ্গাস উত্তরটি দুর্দান্ত, আমাকে কয়েকটি জিনিস যুক্ত করতে দিন।

তাদের সীমানাযুক্ত সমস্ত রাস্তা অনুযায়ী ব্লকগুলি বিল্ডিং অঞ্চলে বিভক্ত করা উচিত। আপনার চারদিকে রাস্তা থাকলে সামগ্রিক প্যাটার্নটি একটি রিং ring উদাহরণস্বরূপ এই লিঙ্কটি দেখুন: http://oldurbanist.blogspot.fr/2012/01/city-blocks-spaces-in-between.html

(ঘনত্বের উপর নির্ভর করে রিং সেন্টারে কোনও জায়গা নাও থাকতে পারে, কোউলুন দেখুন)।

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

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

আনন্দ কর.

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