স্প্রাইট এবং কোনও ধরণের ব্যবহারকারী উত্পন্ন আকারের মধ্যে সংঘর্ষগুলি কীভাবে সনাক্ত করবেন?


9

কীভাবে কোনও স্প্রিট এবং কোনও ধরণের ব্যবহারকারীর দ্বারা উত্পাদিত আকারের মধ্যে সংঘর্ষ সনাক্ত করা যায়।

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

(ডেমো চিত্রসমূহ): মূলত http://i52.tinypic.com/28h0t1g.png হিসাবে পোস্ট করা হয়েছে


আপনার চূড়ান্ত উদাহরণে কেন নীল নির্বাচিত এবং লাল নয় তা আপনি ব্যাখ্যা করতে পারেন? লাইনটি আসলে স্প্রিটকে স্পর্শ করেছে কিনা তাও আপনি পরিষ্কার করতে পারেন? তৃতীয় উদাহরণটি লাল বাক্সটিকে স্পর্শ করে না তবে এটি নির্বাচিত হিসাবে উল্লেখ করা হয়েছে। 5 ম উদাহরণটি খুব অনুরূপ তবে নির্বাচিত নয়। আপনি # 3 এবং # 5 এর মধ্যে কী পার্থক্যটি সন্ধান করছেন?
রোমেন ২

উত্তর:


2

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


1

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


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

আপনি কী ডেটা স্ট্রাকচার চয়ন করেন তার উপর দৃষ্টিভঙ্গি নির্ভর করে, সেগুলি বিটম্যাপ বা ভেক্টর কিনা।

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

দ্বিতীয় পদ্ধতির প্রয়োগ করা এত সহজ নয় তবে আরও বেশি প্রক্রিয়াকরণ শক্তি ব্যবহার করে।

এটি প্রতিটি ক্ষেত্রে পরিমাপ করুন। আমি প্রথমটি করার চেষ্টা করব কারণ এটি কার্যকর করা সহজ। শুভকামনা। :)

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