2 ডি গেমের সংঘর্ষের প্রতিক্রিয়া: প্রদত্ত অক্ষের সাথে স্যাট এবং সর্বনিম্ন স্থানচ্যুতি?


13

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

এখানে এমন পরিস্থিতির একটি উদাহরণ রয়েছে যেখানে এটি গুরুত্বপূর্ণ matter

উদাহরণ

উপরে বর্ণিত স্যাট পদ্ধতি অনুসারে, আয়তক্ষেত্রটি কেবলমাত্র তার অনুমানের ত্রিভুজকে লম্ব করে বেরিয়ে যাবে:

স্যাট-স্টাইল প্রতিক্রিয়া

তবে, বাস্তবের দিক থেকে, আয়তক্ষেত্রটি ত্রিভুজটির নীচের ডান কোণে থামানো উচিত, কারণ এটি যদি প্রথম স্থানটির সংঘর্ষের স্থান হয় তবে যদি এটি তার স্থানচ্যুতি ভেক্টরের সাথে অবিচ্ছিন্নভাবে চলতে থাকে:

বাস্তব প্রতিক্রিয়া

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

(স্ট্যাকওভারফ্লো থেকে ক্রস পোস্ট, আশা করা যায় যে এটি বিধিগুলির বিরুদ্ধে নয়!)


এটি নিয়মের বিরুদ্ধে। ক্রসপোস্ট করবেন না।
আক্রমণহোব

হ্যাঁ, এটি স্ট্যাকওভারফ্লো থেকে মুছুন এবং এটি এখানে রাখুন: পি
ট্র্যাভিসজি

গেমদেব.স্ট্যাকেক্সেঞ্জার / প্রশ্নগুলি / ৯১৪৪/২ আমি আপনার বিশেষ প্রশ্নের উত্তর এখানে দিয়েছি।
আলফিনিটিস

এসও থেকে মুছে ফেলা হয়েছে।
আর্চাগন

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

উত্তর:


11

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

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


2
এটা বেশ চিত্তাকর্ষক। আপনি কি কোনও সুযোগে আপনার অ্যালগরিদমের গতিটিকে সাধারণ (4x বা 8x) মাল্টিসেপলিংয়ের সাথে তুলনা করেছেন?
ট্র্যাভিসজি

দুর্ভাগ্যক্রমে না.
আর্চাগন

চিত্তাকর্ষক, এবং আমি নিশ্চিত যে গণিতও খুব জটিল / নিবিড় নয়। +1
you786

7

এই একই প্রশ্নটি দেখুন: সংঘর্ষের রেজোলিউশন

এবং এছাড়াও, http://www.metanetsoftware.com/technique/tutorialA.html#section5 থেকে (যা আপনি একটি লিঙ্ক পোস্ট করেছেন :))

বিভাগ 5: দ্রুত চলমান বস্তু

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

আপনার যদি একেবারে অবশ্যই থাকে তবে ছোট এবং / বা দ্রুত গতিশীল অবজেক্টগুলির সাথে মোকাবিলা করার জন্য দুটি সাধারণ পদ্ধতি রয়েছে: স্যুইপেট-সংঘর্ষের পরীক্ষা এবং মাল্টিসেপলিং।

- = সুইপ পরীক্ষা = -

দুটি স্ট্যাটিক আকারের মধ্যে ছেদ করার জন্য পরীক্ষার পরিবর্তে, আমরা পরিবর্তে মূল আকারগুলি তাদের ট্র্যাজেক্টরি বরাবর ঝাড়িয়ে, এবং এই অদলবদল আকারের মধ্যে ওভারল্যাপের জন্য পরীক্ষা করে নতুন আকার তৈরি করতে পারি।

চক্র-বৃত্ত এবং এএবিবি-এএবিবি সুইপ পরীক্ষার জন্য, প্রাথমিক ধারণাটি [গোমেজ] এ বর্ণিত হয়েছে।

- = মাল্টিসম্পলিং = -

অদলবদল করা পরীক্ষার একটি খুব সহজ বিকল্প হ'ল মাল্টিসমাল; বস্তুর নতুন অবস্থানে একটি একক স্ট্যাটিক পরীক্ষা করার পরিবর্তে অবজেক্টের আগের এবং নতুন অবস্থানের মধ্যে অবস্থিত বেশ কয়েকটি পজিশনে কয়েকটি পরীক্ষা করুন। এই কৌশলটি এন-র র‌্যাডলকে সংঘর্ষে ব্যবহার করা হয়েছিল

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

সম্পাদনা

সংক্ষেপে এবং এএফআইকে, কয়েকটি সমাধান রয়েছে

  1. আপনার গেমটি কখনই কোনও ছোট এবং / বা দ্রুত চলমান বস্তু না সীমাবদ্ধ করুন যা এটির কারণও হতে পারে
  2. এমন একটি সিস্টেম প্রয়োগ করুন যা সংঘটনগুলি প্রকৃতপক্ষে ঘটতে থামায়, যেমনটি আমি পোস্ট করা প্রথম লিঙ্কে বর্ণিত
  3. দ্রুত এবং / বা ছোট চলন্ত বস্তুর জন্য আপনার নমুনার হার বাড়ান Incre
  4. ... সম্ভবত আরও কিছু, তবে আমি বিশেষজ্ঞ নই।

1

এটি নির্ভর করে যদি আপনি কেবল রৈখিক গতিবিধি চান, বা আপনার যদি কৌণিক গতিবিধিও সামলাতে হয়।

স্যাট ব্যবহারের বিকল্প:

রৈখিক ক্ষেত্রে কেবলমাত্র বস্তুর ব-দ্বীপ রৈখিক গতিবেগের দিক থেকে উত্স থেকে দুটি বহুভুজের মিনকোভস্কির পার্থক্যের বিরুদ্ধে আপনি কিরণ দিতে পারেন।

রশ্মি MD কে আঘাত করলে দুটি বস্তুর সংঘর্ষ হবে এবং হিট পয়েন্ট আপনাকে যে সময়টি সংঘর্ষ করেছিল তা বলবে।

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

রক্ষণশীল অগ্রগতির মূল খসড়া কাগজটি এখানে:

http://www.continuousphysics.com/BulletContinuousCollisionDetection.pdf

আমি এখানে কিছু বিশদে বিশদটি ব্যাখ্যা করে একটি নিবন্ধ লিখেছিলাম:

http://www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/

এই সাহায্য আশা করি!

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