কার্যনির্বাহী… ঘর জেনারেটর সহ ঘর


74

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

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

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

আমি মনে করি একটি বাড়ির হলগুলি অন্ধকূপের করিডোর (আপনাকে অন্য ঘরে নিয়ে যায়) এবং অন্ধকূপের একটি ফাঁকা জায়গা (এটি কোডে স্পষ্টভাবে সংজ্ঞায়িত নয়))

আরও নির্দিষ্টভাবে, প্রয়োজনীয়তাগুলি হ'ল:

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

এটি আরও কিছুটা পরিষ্কার করার জন্য এখানে কিছু চিত্র দেওয়া হয়েছে:

সাধারণ অন্ধকার জেনারেটর কোন করিডোর সহ অন্ধকূপ হাউস জেনারেটরের ফলাফল

আপনি দেখতে পাচ্ছেন যে ঘরে, "খালি জায়গা" এখনও হাঁটা যায় এবং এটি আপনাকে একটি ঘর থেকে অন্য ঘরে নিয়ে যায়।

সুতরাং, এই সমস্ত কথা বলার পরেও, সম্ভবত কোনও বাড়ি করিডোর সহ কেবল সত্যই দৃ tight়তার সাথে জঞ্জালযুক্ত অন্ধকূপ। বা এটি একটি অন্ধকূপ তুলনায় সহজ কিছু। সম্ভবত সেখানে কিছু আছে এবং আমি এটি খুঁজে পাইনি কারণ আমি সত্যিই কী সন্ধান করব তা জানি না।

এই যেখানে আমি আপনার সহায়তা চাই: আপনি কি আমাকে এই অ্যালগরিদম ডিজাইন করতে পয়েন্টার দিতে পারেন ? এটি কি পদক্ষেপ নেবে কোন চিন্তা? আপনি যদি একটি অন্ধকূপ জেনারেটর তৈরি করে থাকেন, তবে আমার প্রয়োজনীয়তার সাথে মিল রেখে আপনি কীভাবে এটি পরিবর্তন করবেন? আপনি নিজের মতো সুনির্দিষ্ট বা জেনেরিক হতে পারেন। আমি সত্যিই আপনার মস্তিষ্ক বাছাই করতে চাই।


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

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

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

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

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

উত্তর:


50

আমার মনে হয় বাইনারি বা টেরিনারি স্পেস পার্টিশনটি ব্যবহারের জন্য এটি ভাল ক্ষেত্রে।

প্রথম পাসে, হল এবং rooms কক্ষের ব্লকগুলি house বাড়ির স্থান ভাগ করুন} পরবর্তী বড় অংশ পান, এটিকে {হল এবং খণ্ড} বা {2 টি অংশ এবং হলের মধ্যে ভাগ করুন} প্রতিটি পদক্ষেপে, স্লাইসিং দিকটি 90 ডিগ্রি ঘোরান। যখন {আর কোনও বড় অংশগুলি ছেড়ে যায় না} বা hall মোট হল অঞ্চল সীমাতে পৌঁছে যায় Stop তখন থামুন}

দ্বিতীয় পাসে, বাকী অংশগুলি কক্ষে বিভক্ত করুন। পরবর্তী বড় অংশ পান এবং এটি বিভক্ত করুন। কিছু বড় কক্ষ থাকার জন্য এলোমেলোভাবে কিছু না-কিছু-বড় অংশগুলিকে বিভক্ত করা ছেড়ে দিন।

যদি কোনও হল আরও পুরানো হলের মুখোমুখি হয় তবে সেখানে প্রাচীর (বা দরজা সহ প্রাচীর) রাখুন।

হলগুলির সাথে সরাসরি বা অন্যান্য ইতিমধ্যে সংযুক্ত কক্ষগুলির মাধ্যমে কক্ষগুলি সংযুক্ত করুন।

উদাহরণস্বরূপ, আপনি আমার ম্যানুয়ালি-তৈরির ফলস্বরূপ বা সি ++ - একইভাবে আংশিকভাবে সম্পন্ন সিউডো কোড দেখতে পারেন । চূড়ান্ত শট:

চূড়ান্ত শট


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

@ পেক আমি নিশ্চিত নই যে নিখুঁত নশ্বর এই সমস্যার জন্য একাডেমিক সমাধান খুঁজে পেতে পারেন কি না। আপনি কাঙ্ক-স্প্লিটার এবং বাক্স-স্প্লিটারের জন্য অতিরিক্ত শর্ত নির্ধারণ করার চেষ্টা করতে পারেন, এবং তারপরে স্তরের উত্পন্নকরণ এবং ড্রপিং সমস্ত স্তরের শর্ত পূরণ করা সম্ভব না পাওয়া পর্যন্ত।
ছায়া বৃষ্টি

হ্যাঁ, আমি আশা করছিলাম যে আমি কিছু মিস করছি। আমার প্রথম পদ্ধতিরটি একটি * দিয়ে কোনও নির্দিষ্ট জায়গাতে ঘরগুলি কীভাবে ফিট করা যায় তা নির্ধারণের জন্য ব্যবহার করা হয়েছিল, তবে এতে হলগুলির পক্ষে যুক্তিটির অভাব ছিল। এখন আমি ভাবছি যে আমি হলগুলি স্থাপনের জন্য বিএসপি ব্যবহার করতে পারি এবং তারপরে ব্লকগুলিতে এ * ব্যবহার করতে পারি। আমি যে বিষয়টি নিয়ে বেশিরভাগ ক্ষেত্রে উদ্বিগ্ন তা হ'ল এটি খুব ব্যয়বহুল এবং সর্বদা কোনও ফলাফল দেয় না। তবে আমাকে প্রথমে এটি পরীক্ষা করতে হবে। সম্ভবত এটি খারাপ হবে না?
27:51

2
আপনি যদি আগ্রহী হন তবে @ পেক আমি দরকারী কিছু পেয়েছি। তাকান এই , এছাড়াও google L-system
ছায়া বৃষ্টি

24

আপনার পছন্দসই ডিজাইনটি করিডোর দ্বারা বেষ্টিত আয়তক্ষেত্রাকার কক্ষগুলির কক্ষগুলিকে লম্পট করে দেয় সে বিষয়টি থেকে আপনি সুবিধা নিতে পারেন। এই বিষয়টি মনে রেখে, আমি এটি করব:

  1. করিডোর এবং কক্ষগুলির জন্য "বড় স্পেস" ডিজাইন করুন
  2. কক্ষগুলি সহ প্রতিটি "বড় স্থান" পূরণ করুন

2 পদক্ষেপ

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


15

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

আমি শ্যাডোস ইন রেইন-এর স্পেস পার্টিশনগুলিকে একটি বেসিক ঘর তৈরি করতে ব্যবহার করেছি এবং তারপরেই ঘরগুলি পূরণ করার জন্য ইগার্সিয়ার পরামর্শ অনুসরণ করেছি।

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

ফলাফল সহ কয়েকটি স্ক্রিনশট এখানে দেওয়া হয়েছে:

মেঝে পরিকল্পনা উত্পাদন পর্যায়ে মেঝে পরিকল্পনা উত্পাদন পর্যায়ে

কক্ষ বসানোর পর্ব কক্ষ বসানোর পর্ব

সংযোগের দরজা দিয়ে এখন!
সংযোগের দরজা দিয়ে এখন!


11

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

তাদের কাজটি নিম্নলিখিত সহজলভ্য অনুমানগুলি ঘিরে তৈরি করা হয়েছিল:

  • শুধুমাত্র অ্যাপার্টমেন্টের বিল্ডিংগুলির সাথে ডিল করে
  • কোন বিভক্ত স্তর
  • বিল্ডিংগুলির আকার (খাম) সীমাবদ্ধ করা অবশ্যই বহুভুজ হতে হবে
  • খামে কোনও গর্ত নেই
  • অনুরূপ বা লিনিয়ারালি পরিবর্তিত খাম বেধ (IE কোন ঘন্টাঘরের আকার)
  • কেবল করিডোর প্রয়োজন এমন বিল্ডিংয়ের সাথে কাজ করে

তাদের প্রক্রিয়াটির একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হয়েছে:

  • খামের জন্য কঙ্কালটি সন্ধান করুন । এর পরে করিডোরগুলি খাম থেকে দূরত্ব, দরজা বা সিঁড়ির সান্নিধ্য এবং পূর্বে স্থাপন করিডোরের সান্নিধ্যের উপর ভিত্তি করে কঙ্কাল বরাবর স্থাপন করা হয়।
  • এরপরে, অবশিষ্ট নন-করিডোর স্থানটি একটি একক অবিচ্ছিন্ন সীমানা সহ সর্বাধিক সংযুক্ত অঞ্চলে বিভক্ত হয়। কিছু ক্ষেত্রে, এর জন্য একটি প্রাচীর serোকানো প্রয়োজন।
  • এই অঞ্চলগুলি তখন অ্যাপার্টমেন্টে বিভক্ত হয় প্রতি অ্যাপার্টমেন্টে কমপক্ষে একটি উইন্ডো বরাদ্দ করার চেষ্টা করে। অতিরিক্ত কিছু ক্ষেত্রে ছোট ছোট অ্যাপার্টমেন্টগুলি এড়াতে কিছু ক্ষেত্রে ছোট বিভাগগুলি মার্জ হবে। উইন্ডো নেই এমন অঞ্চলগুলিকে কেবল উপেক্ষা করা হয়।
  • অবশেষে, অ্যাপার্টমেন্টগুলি নীচে ভিত্তি হিসাবে ওজনযুক্ত ভোরোনাই-জাতীয় চিত্র ব্যবহার করে কক্ষগুলিতে বিভক্ত:

    • ঘরের আকারকে প্রভাবিত করতে বীজের ওজন ব্যবহৃত হয়। দরজা এবং জানালায় বীজ যুক্ত করা হয়। অতিরিক্ত বীজ যোগ করা হয়, সাধারণত কাঙ্ক্ষিত ঘরে প্রতি; যখন স্পষ্টভাবে বলা হয়নি, দেখে মনে হচ্ছে যেন অ্যাপার্টমেন্টের বাইরের দেয়াল বরাবর বীজ স্থাপন করা হয়।
    • সবচেয়ে দূরের বিন্দু দিয়ে শুরু করে প্রদত্ত বীজ এবং অন্যান্য সমস্ত পয়েন্টের মধ্যে একটি লাইন গণনা করা হয় এবং তারপরে শেষ পয়েন্টগুলির সাথে সম্পর্কিত ওজনের তুলনায় একটি দূরত্বকে দ্বিখণ্ডিত করা হয় (EG যদি A & B এর ওজন 1 এবং 4 হয় তবে দ্বিখণ্ডিত বিন্দু হবে) এ থেকে বি যাওয়ার পথে 1/4) দ্বিখণ্ডিত রেখাগুলির সংগ্রহ বাইরের প্রাচীরের সাথে বীজের জন্য কোষ গঠন করে।
    • এরপরে, একটি এস-স্পেস ওয়াল কঙ্কাল (পেপোনিস এট আল 1997 অনুসারে) লাইন দিয়ে অঞ্চলটি বিভাজন করে তৈরি করা হয়েছিল বাইরের প্রাচীরের বৈশিষ্ট্যগুলির (উইন্ডো বা দরজা) পার্শ্ববর্তী জোড়গুলির মধ্যবর্তী মাঝের পয়েন্টগুলি থেকে লম্বভাবে উত্পন্ন হয়।
    • অবশেষে, এস-স্পেস কঙ্কাল থেকে দেয়ালগুলি নির্বাচিত হয় যা 'ভোরোনাই কোষের দেয়ালের সাথে যথাসম্ভব উপযুক্ত হয় correspond'

3
আপনি ছবি অন্তর্ভুক্ত করতে পারেন? এটা দুর্দান্ত হবে। আমি কাগজটি স্কিম করেছিলাম এবং তাদের তৈরি ঘরগুলি কোনও স্থাপত্য পিওভ থেকে ভাল লাগছিল।
কংগ্রেসবঙ্গাস

অত্যন্ত আকর্ষণীয় পদ্ধতি, আমি যে কোনও ধারণাগুলি এ থেকে সরিয়ে নিতে সক্ষম হতে পারি তার জন্য নিজেকে আরও ঘনিষ্ঠভাবে পরীক্ষা করে দেখতে হবে।
Draco18s

আমি এখানে কাজ থেকে শিথিল করতে এসেছি ... আমার গবেষণার বিষয়টি অবাক করে দিয়েছিল। আমি আমার নিজের গবেষণার উপর ভিত্তি করে একটি উত্তর লিখতে খুব অলস হয়েছি (আমি কেবলমাত্র অ্যালগোথার্মের খালি হাড়গুলিই ডিজাইন করেছি, সুতরাং এটি কোনওভাবেই লাভজনক নয়) বা সমস্যাটির বিষয়ে ড্যানিল নাগির দৃষ্টিভঙ্গি বর্ণনা করে রেখেছি, তাই আমি কেবল এখানেই রেখে দেব autodeskresearch.com/publications/…
ফিলিপ গুটিরেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.