2 ডি সংঘর্ষ সনাক্তকরণ


11

ধরা যাক আমি এই চরিত্রটি ব্যবহার করছি।

পাখি
(উত্স: আইকনবগ.কম )

আপনি এর জন্য সংঘর্ষ সনাক্তকরণ কীভাবে বাস্তবায়ন করবেন? একটি বাউন্ডিং বাক্স ব্যবহার করা ভাল অনুমান হিসাবে মনে হয় না, কারণ পাখির আকারটি কোনও স্কোয়ারের কাছাকাছি নেই।

আমি ভাবছিলাম অবজেক্টের ভিতরে এক ধরণের কোয়াড ট্রি ডেটা স্ট্রাকচার যা ইমেজের অংশগুলিকে প্রতিনিধিত্ব করে। প্রতিটি পাতা হয় false(পাখির বাইরের সাদা / স্বচ্ছ স্থানকে coversেকে রাখার ক্ষেত্রে) বা true( পাখির কোনও অঞ্চল যেমন বীচ, চোখ ইত্যাদি উপস্থাপন করে) হতে পারে। তারপরে কোনওভাবে পাখির সাথে সংঘর্ষের জন্য দৃশ্যের একমাত্র বাধা পরীক্ষা করুন

তবে আমার পদ্ধতির আমার সমস্যাগুলি হ'ল:

  1. কোয়াড ট্রি কীভাবে আরম্ভ করতে হয় তা আমি জানি না।
  2. কোয়াড ট্রি শুরু হয়ে গেলে, চিত্রের স্থানাঙ্কের মধ্যে একবার বাধা আসার পরে আমি কীভাবে তাকে অতিক্রম করব এবং এটি ব্যবহার করব তা নিশ্চিত নই।

আপনি স্কোয়ারিশ-বিহীন অক্ষরগুলির সাথে সংঘর্ষ সনাক্তকরণ কীভাবে করবেন?

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

LE2: আমি মোটামুটি নির্ভুল সংঘর্ষের বিষয়ে যত্নশীল। আমি ভাবতে পারি না যে কোনও একক সীমানা বাক্স বা চেনাশোনা কীভাবে কমপক্ষে শালীনভাবে সেই আকারটি তৈরি করতে পারে, সুতরাং এই পদ্ধতির কাজ হবে না।


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

ধন্যবাদ, আমি যাইহোক এটি করার পরিকল্পনা করছিলাম, তবে 'দানাদার চেক' কী হবে তা আমি পুরোপুরি নিশ্চিত নই। :)
async

1
একমাত্র গুরুত্বপূর্ণ বিবরণ অনুপস্থিত: আপনি এটি দিয়ে কী করতে চান? আপনি সঠিক সংঘর্ষ সম্পর্কে যত্নশীল? আপনি একটি বৃত্তের সাথে চরিত্রটি আনুমানিক খুশি? আপনি কি চান ধূলিকণাটি চরিত্রের চোখের সাথে বাকী অংশ থেকে পৃথকভাবে সংঘর্ষিত হয়?
আনকো

@ আঙ্কো কীভাবে আপনি বৃত্তের সাহায্যে এই আকারটি আনুমানিক করতে পারেন? আমি মোটামুটি নির্ভুল সংঘর্ষের বিষয়ে যত্নশীল really সত্যিকারের পিক্সেল সুনির্দিষ্ট নয়, তবে এমন কিছু যা ভাল / প্রাকৃতিক দেখায়-
async

1
এই মত । "ভাল" এবং "প্রাকৃতিক" বলতে কী বোঝায়? এটি কি দার্শনিক প্রশ্ন?
আনকো

উত্তর:


12

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

এটি overcomplicate করবেন না।

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


3
হ্যাঁ, একটি আকৃতি এটি আবরণ না করে কেবল কয়েকটি আকারের একটি ছোট অ্যারে তৈরি করুন। উদাহরণস্বরূপ: i.imgur.com/Dd4yyGN.png
MichaelHouse

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

অতিরিক্ত নির্ভুলতার জন্য দেহের জন্য একটি বৃত্তের সংঘর্ষক এবং বোঁচের জন্য একটি আয়তক্ষেত্রাকার।
Kroltan

14

একটি দুটি পদক্ষেপ চেক প্রক্রিয়া

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

দ্বিতীয় পাসে , আপনি যদি আরও নির্ভুলতা চান এবং আপনি যদি একটি সত্য পিক্সেল নিখুঁত সমাধান চান তবে আপনি কেবল এটি করতে পারেন, একটি পিক্সেল নিখুঁত চেক পাস

যেহেতু আপনার চিত্রটি একটি পিএনজি (বা অন্য কোনও ফাইল ফর্ম্যাট যাতে একটি আলফা চ্যানেল রয়েছে) এটি বরং সহজ হবে

  1. উভয় চিত্রের মধ্যে ছেদ করার একটি সাধারণ আয়তক্ষেত্র তৈরি করে দৃশ্যে ও পাখির সেই এক বস্তুর মধ্যবর্তী ছেদ অঞ্চল গণনা করুন
  2. সেই ছেদটির মধ্যে, প্রতিটি পিক্সেলের দুটি চিত্রের মধ্যে একটি আলফা মান> 0 রয়েছে কিনা তা পরীক্ষা করুন
  3. যদি এরকম কোনও পিক্সেল উপস্থিত থাকে তবে আপনি নিজের সংঘাত পেয়েছেন। অন্যথায় না

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

চিত্র থেকে আলফা চ্যানেল

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

"সূক্ষ্ম" বিস্তারিত সংঘর্ষের বাউন্ডিং বক্স আনকো পরামর্শ দিয়েছে:

আরও বিস্তারিত বাউন্ডিং বক্স

পিএস: যদি আপনার চিত্রটির একটি হলো, কোনও প্রভাব বা এর চারপাশে অন্যান্য অ -0 অ্যালফা চ্যানেল রয়েছে যার সাথে আপনি সংঘর্ষ করতে চান না, তবে আলগোরিদম থ্রেশহোল্ডটি সহজেই এটি সামঞ্জস্য করতে সামঞ্জস্য করা যেতে পারে


1
ধন্যবাদ! তবে সর্বোপরি আমার পিক্সেল নিখুঁত নির্ভুলতার প্রয়োজন হবে না। দুর্দান্ত উত্তর যদিও পরবর্তী সময়ে কার্যকর হবে।
async

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

3

আমি শরীরের জন্য একটি বৃত্ত এবং ચાંચের জন্য একটি একক আয়তক্ষেত্র ব্যবহার করব তবে এটি কেবল আমার অভিমত। আপনার সংঘর্ষের জ্যামিতিকে অত্যধিক জটিলকরণ আপনার অ্যাপ্লিকেশনটিকে ধীর করতে পারে যদিও আপনি অন-স্ক্রিনে অক্ষরের সংখ্যা কার্যত দ্বিগুণ (বা আরও) করছেন)


0

হতে পারে আপনি একরকম উইঙ্কি বহুভুজ / প্রান্তের সংঘর্ষক ব্যবহার করতে পারেন।

ঠিক কীভাবে এটি কাজ করবে তা নিশ্চিত নয় তবে:

দুটি বস্তু: বস্তু 1: পাখি (o1), বস্তু 2: যে জিনিসটি পাখিটিকে আঘাত করতে পারে (o2)

1) একটি সীমানা আকৃতিটি সংজ্ঞায়িত করুন যা বহুভুজ যা প্রশ্নের প্রথম বস্তু (ও 1) এর সাথে খুব ফিট করে।

2) O1 কোণগুলি, O2 পান পারা বোধগম্যভাবে ধাক্কা লাগা পারা ছাড়া বোধগম্যভাবে ধাক্কা লাগা O2 পাসিং ছাড়া মাধ্যমে O1 বা তদ্বিপরীত।

আকৃতির অবস্থান এবং আকারের সাথে (o2) আপনি সম্ভবত প্রান্তগুলি (o1 এর) বিচ্ছিন্ন করতে পারেন যা অনুমানযোগ্যভাবে আঘাত করা যায় না, এটি কারণেই তারা অন্য প্রান্তের (ও 1 এর) পিছনে রয়েছে যা o2 এর কাছাকাছি রয়েছে whether যদি আপনার একটি ডান ত্রিভুজ থাকে যার অনুমানের মুখোমুখি ডান দিকে এবং ডানদিকে এবং একটি আয়তক্ষেত্র সোজা দিকে পৌঁছেছে (এক্স-অক্ষ বরাবর দীর্ঘ দিক দিয়ে) তবে আপনি কোন প্রান্তগুলি বাদ দিতে পারবেন তা বলতে পারেন কারণ সেগুলি শুরু এবং শেষ y মান দুটি হয় আয়তক্ষেত্রের উপরে বা নীচে

3) আপনি o2 এর কোন প্রান্তের বিন্দুগুলির মধ্যে একটিতে o1 এর যে কোনও প্রান্তের বিন্দুর সাথে সমান কিনা তা নির্ধারণ করুন যা আপনি পদক্ষেপ 2 তে নির্বাচন করেছেন।

এই ধারণাটি সম্ভবত বহুভুজগুলির সংঘর্ষের জন্য সবচেয়ে ভাল কাজ করে (যেমন পরিষ্কার প্রান্তযুক্ত জিনিসগুলি) তবে আপনি সম্ভবত একটি বৃত্তটিকে একটি দীর্ঘ প্রান্ত হিসাবে বিবেচনা করতে পারেন (যেমন যদি ও 2 একটি বৃত্ত ছিল)।

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