2D গ্রিড কোষগুলি কীভাবে চলন্ত চেনাশোনা দ্বারা সজ্জিত হয়?


9

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

আমি গ্রিডের বিপরীতে একটি রশ্মি সনাক্ত করতে একটি অ্যালগরিদম লিখেছিলাম, যা আমাকে রশকে ছেদ করে এমন সমস্ত কোষ প্রদান করে। তবে প্রকৃত বস্তুটি বিন্দু আকারের নয়; আমি বর্তমানে তাদেরকে চেনাশোনা হিসাবে উপস্থাপন করছি। তবে আমি চলমান চেনাশোনাটি সনাক্ত করতে কার্যকর অ্যালগরিদম বের করতে পারি না। আমার যা প্রয়োজন তা এখানে একটি চিত্র: এখানে চিত্র বর্ণনা লিখুন

নম্বরগুলি ক্রমানুসারে গ্রিড কোষগুলির সাথে কোন বৃত্তে সংঘর্ষ হয় তা দেখায়। এই সংঘর্ষগুলি খুঁজে পেতে কেউ কি অ্যালগরিদম জানেন? সাধারণত সি # তে

আপডেট বৃত্তটি একটি একক গ্রিড কক্ষের চেয়ে বড় হতে পারে।


এমএমএইচ কেন 4 সংঘর্ষের আগে 4?
FxIII

@ এফএক্সআইআইআই আমি ছবিটির বৃত্তটি আসলে স্থানান্তরিত করেছি এবং এটি 4 এর আগে 3 টি এসেছিল মাত্র সবেমাত্র, তবে এখনও আগে।
কিছু মনে করবেন না

উত্তর:


6

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

যাক সি আপনার কেন্দ্র হতে হবে এবং r ব্যাসার্ধ তাই পি ' = সি + + ( , 0) এবং পি " = সি + + (0, R)।

যদি ডি আপনার দিকনির্দেশক ভেক্টর হয় (ভার্সর) আপনার দুটি লাইন রয়েছে:

আর '= ডি · টি + পি' ,

আর "= ডি · টি + পি"

সমীকরণের রেখাগুলির সাহায্যে আপনাকে সরল those রেখাগুলি ছেদ করতে হবে:

y = i এবং y = i এটাই আপনার গ্রিডের প্রান্ত!

সমাধান সহজ হয় কারণ আপনি কেবল এক্স বা R এর Y উপাদান 'এবং কিছু "বিবেচনা আছে। আপনি পাবেন টন প্রতিটি insersection জন্য গুলি মান, এবং thoose জন্য পয়েন্ট টি গুলি, সহজভাবে সাজানোর তাদের দ্বারা বিন্দু T এবং আপনি শেষ.

আমি বিশ্বাস করি যে আপনি ছেদ বিন্দুটি জানেন তবে আপনি সহজেই বলতে পারবেন যে কোনও সেলটি কী আঘাত করেছে।

R <1 (ঘরের প্রস্থ এবং উচ্চতা) থাকলে এটি কাজ করে ।

এটি অন্যান্য ক্ষেত্রে কেবল পিপি সম্পর্কে কিছুটা বিবেচনা করার ক্ষেত্রেও কাজ করে । আমরা দিকনির্দেশের কারণে শীর্ষ এবং বাম নির্বাচন করি, বটম এবং রাইটকে বিপরীত দিকের জন্য বিবেচনা করা উচিত, আপনি কেন তা বুঝতে পারেন।

এখন এই চিত্রটি দেখুন: বড় বৃত্ত

চেনাশোনাটি একটি একক কক্ষের পরে বড় এবং আমরা মনে করি এটি আপনার অঙ্কনের মতো একই দিকে চলেছে। পি 1 হ'ল প্রথম পয়েন্টটি স্পর্শ করবে, পি 2 দ্বিতীয়, পি 3 অকেজো কারণ নীচের অর্ধেক রয়েছে। আপনাকে যা করতে হবে তা হল P1 এবং P2 থেকে রশ্মি ফেলে যা আমরা আগে দেখেছি এবং উল্লম্ব লাইনের জন্য একই কাজ করব।

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

কিছু সত্য কথা বলতে আপনি কিছু জ্যামিতিক বিবেচনা করে এই রশ্মিকে অঙ্কন করা এড়াতে পারেন, তবে এটি জিনিসগুলিকে বোঝা আরও শক্ত করে তুলতে পারে।


হ্যাঁ, আমি পি এবং পি "নিজেই পয়েন্ট করেছি, তবে বৃত্ত যখন একক কোষের চেয়ে বড় হয় তখন কী করণীয় তা বুঝতে পারি নি Additional অতিরিক্ত পয়েন্টগুলি সত্যই বোধগম্য হয় (এবং আমার অবশ্যই কেবল পি এবং র মধ্যে রশ্মি যুক্ত করতে হবে ) পি ")
কিছু মনে করবেন না

জ্যামিতিক বিবেচনা করা যেতে পারে যা গণনা সহজ করে তোলে তবে বাস্তবায়নটি আপনাকে অভিজ্ঞতার দ্বারা একই ফলাফলের দিকে নিয়ে যেতে পারে।
এফএক্সআইআইআই

এটি কি স্পষ্ট যে আপনি অনুভূমিক এবং উল্লম্ব গ্রিড লাইনের জন্য পৃথকভাবে পরীক্ষা করতে হবে?
এফএক্সআইআইআই

আমার মনে হয় আপনি যখন চেনাশোনাটি গ্রিডের শীর্ষকে coversেকে রাখেন তখন আপনাকে অবশ্যই পরীক্ষা করে নিতে হবে, কারণ বৃত্তটি তার কোণায় ত্রিভুজ-সংলগ্ন কক্ষের সাথে সংঘর্ষিত হবে তবে এটি অবশ্যই প্রথমে বৃত্তটির শীর্ষ / বাম / নীচে / ডানদিকের পয়েন্ট হবে না (এবং আপনি সংঘর্ষটি খুব তাড়াতাড়ি সনাক্ত করতে পারবেন)) উদাহরণ: প্রশ্নের ডায়াগ্রামে উদাহরণ চিত্রের বর্গগুলি 3,4,5। সেগুলি ক্রমে আঘাত করা হয় (3 তারপর 4 তারপর 5) তবে আপনার অ্যালগরিদম একই সাথে 4 এবং 5 সনাক্ত করবে।
ফিনউইউ

@ ফিনওয়াল তারা কেবল তখনই স্পর্শ করেন যদি সাইকেল ঠিক দ্বিখাদকের দিকে যেতে পারে।
FxIII

1

যদি আপনি আপনার রশ্মি-সংঘর্ষের অ্যালগরিদম ব্যবহার করতে চান তবে আপনি প্রতিটি বৃত্তের আটটি পয়েন্ট বেছে নিতে পারেন (45 ডিগ্রি বর্ধিত সময়ে, আপনার বর্গ গ্রিডের সাথে সংযুক্ত) এবং সংশ্লিষ্ট পয়েন্টগুলির মধ্যে রশ্মি-সংঘর্ষটি ব্যবহার করতে পারেন (অর্থাত্ একটি শীর্ষে থেকে) অন্যের শীর্ষে বৃত্ত)। এই সমস্ত রশ্মি-সংঘর্ষের মিলনটি ছেদ করা ঘরগুলির পুরো সেট।

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


8 রশ্মি সম্ভবত সমস্ত ছেদগুলির গ্যারান্টি দিবে তবে তারা সেগুলি সঠিক ক্রমে দিবে না। এবং সংঘর্ষের জন্য আমার কেবলমাত্র কোষের একটি তালিকা নয়, অর্ডার প্রয়োজন।
কিছু মনে রাখবেন না

প্রতিটি সংঘর্ষের জন্য টি-মান ধরে রাখতে আপনার রশ্মি-সংঘর্ষের অ্যালগরিদমকে বাড়ান। আপনি যখন কক্ষগুলির ইউনিয়ন পাবেন, আপনি সঠিক ক্রমটি পেতে টি-মান অনুসারে বাছাই করতে পারেন।
TreDubZedd

তবে আমি কীভাবে বিভিন্ন রশ্মির টি-মান তুলনা করতে পারি ?
কিছু মনে করবেন না

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

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

1

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


আমি এটি সম্পর্কেও ভাবছিলাম, তবে এটি আমার মতে এটি সঠিক অ্যালগরিদম নয়। ব্রেনহ্যাম কেবল একটি পিক্সেল বেছে নেয়, তার সবকটি দরকার। এবং ব্রেনহ্যামকে কেবল একটি পিক্সেলযুক্ত বৃত্তের সাথে মানিয়ে নেওয়া আলাদা হবে।
zacharmarz

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