মনে হচ্ছে আপনি গাছ সম্পর্কে শিখছেন!
এবং আমি গুরুতর হয়ে উঠছি, যদি আপনি বর্তমানে আপনার সমস্ত কিউবের একটি অ্যারের উপরে লুপ করছেন তবে আপনার অবশ্যই সত্যই বিভিন্ন স্থানের ডেটা স্ট্রাকচারটি দেখে নেওয়া উচিত। এই ক্ষেত্রে আপনার ঘনক্ষেত্রের পৃথিবীটি পুনরায় কল্পনা করার সর্বোত্তম উপায় হ'ল গাছ হিসাবে।
আমরা কেন কারণগুলিতে যাব তার আগে আমাদের সমস্যা সম্পর্কে চিন্তাভাবনা করি। আমরা এমন একটি সমাধান খুঁজছি যেখানে যতটা সম্ভব কম ব্যয়ের জন্য আমরা পার্শ্ববর্তী কিউবগুলির একটি তালিকা উদ্ধার করতে পারি যা প্লেয়ারের সাথে সংঘর্ষে রয়েছে। এই তালিকাটি যতটা ছোট হওয়া উচিত তবুও যথাযথভাবে যথাযথ হওয়া উচিত।
এখন এই অঞ্চলটি নির্ধারণ করার জন্য, আমাদের প্লেয়ারের স্থানাঙ্কের স্থানটি কিউব মানচিত্রের স্থানাঙ্ক স্থানে ম্যাপ করতে হবে; তা হল, আমাদের খেলোয়াড়ের ভাসমান পয়েন্টের অবস্থানটি কিউবার বহুমাত্রিক অ্যারের একটি বিচ্ছিন্ন সূচকতে মানচিত্রের প্রয়োজন (উদাহরণস্বরূপ স্বরলিপিটি হতে পারে world[31][31][31]
, অর্থাত্ একটি *৪ * *৪ * 64৪ বহুমাত্রিক অ্যারের জন্য সঠিক মাঝারি)।
আমরা কেবল একই কাছাকাছি ঘনক্ষেত্রের নমুনা ব্যবহার করে পার্শ্ববর্তী ব্লকগুলি সহজেই গণনা করতে পারি, সম্ভবত এটি কেবল নিকটবর্তী কিউবগুলির নমুনা তৈরি করে, তবে এটি এখনও ধ্রুব পুনঃ গণননের প্রয়োজন, এবং কোনও বস্তু যা স্থান নির্ধারণে পৃথক নয় (যেমন কিউবে মানচিত্র নাও পারে) এর জন্য অনুমতি দেয় না for mAP)।
আদর্শ পরিস্থিতি হ'ল বালতিগুলির একটি সেট যা আমাদের ঘনক্ষেত্রের মানচিত্রের নির্দিষ্ট বিভাগগুলির জন্য আমাদের কিউবগুলির সেট রাখে, পার্শ্ববর্তী অঞ্চলটিকে পুনরায় গণনার পরিবর্তে সমানভাবে বিভক্ত করা হয়, আমরা কেবল এই অঞ্চলগুলির মধ্যে এবং বাইরে চলে যাই । যে কোনও অ-তুচ্ছ হিসাবের জন্য, আমাদের এই জাতীয় ডেটা রাখা সমস্ত কিউবগুলিকে পুনরাবৃত্তি করতে পারে এবং কাছাকাছি থাকা কেবলমাত্র এই পৃথক সেটগুলিকেই দূর করতে পারে।
প্রশ্নটি: আমরা কীভাবে এটি বাস্তবায়ন করব?
*৪ * 64৪ * 64৪ বিশ্বের জন্য, এটি 8 * 8 * 8 জোনে ভাঙার কল্পনা করুন । এর অর্থ হ'ল আপনার বিশ্বে আপনার প্রতি অক্ষে 8 টি জোন (এক্স, ওয়াই, জেড) থাকবে। এই প্রতিটি জোনে 8 টি কিউব থাকবে যা এই নতুন সরলিকৃত সূচক দ্বারা সহজেই পুনরুদ্ধারযোগ্য।
আপনার বিশ্বের প্রতিটি কিউবটি পুনরাবৃত্ত করার পরিবর্তে আপনার যদি কাছের কিউবসের একটি সেটে কোনও ক্রিয়াকলাপ করা প্রয়োজন, তবে আপনি কেবলমাত্র এই অঞ্চলগুলিতে পুনরাবৃত্তি করতে পারবেন, আসল *৪ * 64৪ * (৪ (262144) থেকে সর্বোচ্চ পুনরাবৃত্তির সংখ্যাটি ভেঙে মাত্র 520 (8 * 8 * 8 + 8)।
এখন এই জোনগুলির জগত থেকে জুম আউট করুন, এবং অঞ্চলগুলি আরও বড় সুপার জোনে রাখুন ; যার মধ্যে প্রতিটি সুপার-জোনটিতে 2 * 2 * 2 নিয়মিত অঞ্চল থাকে । আপনার বিশ্বের বর্তমানে রয়েছে হিসাবে 512 (8 * 8 * 8) অঞ্চল , আমরা 8 * 8 * 8 ভাঙ্গতে পারে জোন 64 (4 * 4 * 4) মধ্যে সুপার-অঞ্চল 8 ভাগ অঞ্চল 2 দ্বারা অঞ্চল প্রতি সুপার-জোন । উপরে থেকে একই যুক্তি প্রয়োগ করা, এটি সুপার জোনটি সন্ধান করতে 512 থেকে 8 পর্যন্ত সর্বাধিক পুনরাবৃত্তিগুলি ভেঙে দেবে ; এবং তারপরে অগ্রণী অঞ্চলটি সর্বাধিক 64 সন্ধান করুন(মোট সর্বোচ্চ 72)! আপনি দেখতে পাচ্ছেন কীভাবে এটি ইতিমধ্যে আপনাকে প্রচুর পুনরাবৃত্তি সাশ্রয় করছে (262144: 72)।
আমি নিশ্চিত আপনি গাছগুলি কতটা দরকারী তা এখনই দেখতে পাবেন। প্রতিটি জোন গাছের উপর একটি শাখা, প্রতিটি সুপার-জোন পূর্ববর্তী শাখা হিসাবে। আপনার যা প্রয়োজন তা সন্ধান করার জন্য আপনি কেবল গাছটিকে অনুসরণ করছেন; সামগ্রিক ব্যয় হ্রাস করতে ডেটা এর ছোট সেট ব্যবহার।
নীচের চিত্রটি আপনাকে ধারণাটি কল্পনা করতে সহায়তা করবে। ( উইকিপিডিয়া: অক্টোবর থেকে চিত্র ):
দাবি পরিত্যাগী:
উপরে যেমন আদর্শ সেট আপ করা হয়েছে, যেখানে আপনার ভক্সেল-ওয়ার্ল্ড ইতিমধ্যে একটি স্থির আকারের বহুমাত্রিক অ্যারেতে নির্ধারণ করা হয়েছে, আপনি কেবল প্লেয়ারের অবস্থান সম্পর্কে জিজ্ঞাসা করতে পারেন, তারপরে একটি ও (1) ব্যয়ের সাথে ব্লকগুলির আশপাশের ব্লকগুলি! (ওলোভস্কিসের ব্যাখ্যা দেখুন) তবে আপনি যখন আরও ভোকসেলের গেমটিতে আপনার পৃথিবী খুব কমই স্থির আকারের বিবেচনা শুরু করেন তখন এটি আরও কঠিন হয়ে যায়; এবং এইচডিডি থেকে মেমরিতে পুরো সুপার-জোনগুলি লোড করতে সক্ষম হওয়ার জন্য আপনার ডেটা-কাঠামোর প্রয়োজন হতে পারে । একটি স্থির আকারের বহুমাত্রিক অ্যারের থেকে পৃথক, গাছগুলি খুব সহজেই সংযুক্ত অ্যালগরিদমে ব্যয় না করে খুব সহজেই এটিকে অনুমতি দেয়।