একাধিক বস্তুর সাথে সংঘর্ষের ক্ষেত্রে সংঘর্ষের রেজোলিউশন


15

আমার স্থির অবজেক্ট এবং অস্থাবর বস্তু রয়েছে। সংঘর্ষগুলি পৃথকীকরণ-অক্ষ-উপপাদ ব্যবহার করে সনাক্ত করা হয়।

উদাহরণস্বরূপ, এই পরিস্থিতিতে আমার কাছে দুটি স্থিতিশীল বস্তু রয়েছে (লাল):

এখানে চিত্র বর্ণনা লিখুন

এবং উভয়ের মধ্যে একটি অস্থাবর বস্তু:

এখানে চিত্র বর্ণনা লিখুন

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

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

এখানে চিত্র বর্ণনা লিখুন

লক্ষ্য করুন যে আমি এমএসপেইন্টে এটি খুব দ্রুত তৈরি করেছি, তাই সেই চিত্রটিতে এটি হতে পারে যে ন্যূনতম অনুবাদ-ভেক্টর সবুজ আয়তক্ষেত্রটিকে উপরের দিকে ঠেলে দেয় তবে আমি এখানে ধরে নিতে চলেছি যে এটি বামে / বাইরে সরিয়ে নিয়ে যাচ্ছে ডান আসলে সংক্ষিপ্ত।

এটি পৌঁছানোর সাধারণ উপায় হ'ল কেবল একবারে পরিবর্তে সমস্ত ফ্রেমের জন্য একটি সংঘর্ষের সমাধান করা। তবে আমার ক্ষেত্রে, এর ফলে ফ্লিপ-ফ্লপ হবে:

প্রথমত, দ্রাবক দুটি সংঘর্ষ সনাক্ত করে তবে কেবল ডান আয়তক্ষেত্র এবং সবুজ আয়তক্ষেত্রের মধ্যে সংঘর্ষের সমাধান করে:

এখানে চিত্র বর্ণনা লিখুন

তারপরে, পরবর্তী ফ্রেমে, এটি কেবলমাত্র একটি সংঘর্ষ সনাক্ত করে যা বাম লাল আয়তক্ষেত্র এবং সবুজ আয়তক্ষেত্রের মধ্যে রয়েছে এবং এর সমাধান করে:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, এটি আসলে সংঘর্ষের সমাধান করে না (উদাহরণস্বরূপ, সবুজ আয়তক্ষেত্রটিকে শীর্ষে ঠেলে দিয়ে) এবং পরিবর্তে কেবলমাত্র দুটি রাজ্যের মধ্যে অসীমভাবে ফ্লপ ফ্লপ করুন।

আমি কীভাবে এটি সমাধান করতে পারি?


আপনি আপনার উদাহরণে আয়তক্ষেত্রগুলি ব্যবহার করছেন। আপনার সংঘর্ষের অ্যালগোরিদমটি কেবলমাত্র একটি অক্ষকে সংঘর্ষের সমাধান করে? যদি তা হয়, তবে তা বোঝা যায় যে আপনি যে আচরণটি বর্ণনা করেছেন তা ঘটছে।
বিশৃঙ্খলাবিদ

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

+1 ভাল প্রশ্ন। আমি শিরোনাম থেকে (2 ডি) "ট্যাগ" সরিয়েছি, এটি এমন কিছু যা আপনার এড়ানো উচিত ( মেটা দেখুন )।
বাম্মজ্যাক

উত্তর:


7

আপনি কী অর্জন করতে চাইছেন তার উপর নির্ভর করে (উচ্চ শারীরিক নির্ভুলতা বা কেবলমাত্র একটি নিকট-পর্যাপ্ত রিয়েল-টাইম সিমুলেশন) আপনি অনুমানমূলক যোগাযোগগুলি ব্যবহার করে দেখতে পারেন।

এখানে বিশদগুলি: http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an-continuous-collision-engine-approach-part-1/

তিনি এ নিবন্ধে এটি বাস্তবায়নের জন্য আপনার যা জানা দরকার তা বর্ণনা করেছেন এবং অন্যান্য পদ্ধতির তুলনায় এটি খুব সহজ (যেমন গোলকের ingালাই এবং তারপরে প্রভাবের সময় সংঘর্ষের রেজোলিউশনগুলি বাছাই করা)।

আপনার যদি আরও প্রয়োজন / চান তবে আপনি তার উত্স কোডটি (আইআইআরসি) $ 7 এর জন্য কিনতে পারবেন।

এখানে আমার বাস্তবায়নের একটি ভিডিও 3D: http://www.youtube.com/watch?v=JvT2H1RmOas

সিমুলেশনটি কেবল একটি একক পুনরাবৃত্তির সাথে কতটা স্থিতিশীল তা লক্ষ করুন। আপনি স্থিতিশীল অবস্থায় একাধিক সংঘর্ষের সমাধান করতে সহজেই ফ্রেম প্রতি একাধিক পুনরাবৃত্তি ব্যবহার করতে পারেন যা আরও সঠিক হবে।


2

আপনি প্রতিটি সংঘর্ষের সমাধানের জন্য প্রয়োজনীয় সমস্ত ভেক্টরকে প্রথমে গণনা করতে পারেন তারপরে একটি ফলাফলকে গণনা করতে পারেন।

কেবলমাত্র যখন এটি আপনাকে বাইট করতে পারে যদি এই ভেক্টররা একে অপরকে বাতিল করে দেয়, ঠিক যেমন আপনার উদাহরণের মতো। সেক্ষেত্রে সংঘর্ষের সমাধান হতে পারে না।


সংঘর্ষের সাথে প্রায় 10 এপিসিলন এর परिमाणের সাথে একটি ছোট্ট এলোমেলো ভেক্টর যুক্ত করুন ? ভাসমান পয়েন্ট গণিতের বাকী কাজটি করা উচিত।
মার্টিন সোজকা

2
হ্যাঁ, এটি কাজ করতে পারে, আমার ধারণা। তবে এটি চটজলদি আন্দোলনও তৈরি করতে পারে।
মিহাই মারুসেয়াক

1
আমি আশা করি আমি এখনও এ সম্পর্কে একটি উত্তর পেতে পারি: একটি ফলস্বরূপ গণনা করা "অসীম লুপ" সমস্যার সমাধান করে, তবে "ক্র্যাক" সমস্যাটি পুনরায় পরিচয় করিয়ে দেয়, যেখানে একই আকারের টাইলস দিয়ে তৈরি প্রাচীরের উপর স্লাইড করার সময় শরীরটি শরীরকে পেতে দেয় moving টাইলসের "ফাটল" এর মধ্যে আটকে আছে। এই উভয় সমস্যা সমাধানের কোন উপায় আছে?
ভিটোরিও রোমিও

সম্মত হন ... এর মতো অসম্ভব অনমনীয়-দেহ সংঘর্ষের সমাধানের জন্য সর্বোত্তম "সঠিক উত্তর" নেই। হয় এটি জট দেয়, বা আপনি এক বা একাধিক অবজেক্টে কিছু "মুশকিলতা" মঞ্জুর করেন।
ডেভিড ভ্যান

0

আপনি যদি এটি ঘনিষ্ঠভাবে লক্ষ্য করেন, তবে অবজেক্টের সেই অবস্থাটি (বা হওয়া উচিত) অপ্রাপ্য ..

বামতমতম লাল আকৃতিটি R1 আকৃতি হতে হবে এবং ডানদিকের লাল আকৃতিটি R2 আকারের হতে দিন। সবুজ আকারটি জি হতে দিন

অর্থাত্ তিনটি বস্তুর আকার এবং জ্যামিতি দেওয়া এবং প্রদত্ত যে সমস্ত বস্তু প্রবেশযোগ্য নয়:

 (1) G could not have been just directly to the left of R2, since R1 has been there 
     already. Consequently, the translation of G from left to right, penetrating R2
     could not have occurred.
 (2) G could not have been just directly to the right of R1 since R2 has been there 
     already. Consquence of which is the same as that from (1).
 (3) Had G come from the top, the movement will be blocked by both R1 and R2, given
     that their geometry and Y coordinate is the same.

এখন, এটিতে উত্সাহিত হয়, যদি আপনার অ্যালগরিদম আপনার বস্তুগুলিকে একে একে জিজ্ঞাসা করে, তবে এটি একত্রে সামঞ্জস্যের বিষয়, অর্থাত এক অর্থে, অ্যালগরিদম একই সাথে সমস্ত বস্তুগুলি পরীক্ষা করে দেখার কথা, তবে অ্যালগরিদম আপনাকে সীমাবদ্ধ করে দেয় অবজেক্টস এবং তাদের একবারে প্রক্রিয়া করুন ...

R2 এর বিপরীতে চেক করার পরে যদি জি আর 1 এর বিপরীতে চেক করা হয়, তবে জি বৈধভাবে R1 এর ডানদিকে উপস্থিত হবে (যদি জি বলছেন R1 এর সাথে ভেক্টরের দিক দিয়ে <-1, -1> নির্বিচারে প্রস্থ (বা দূরত্ব) ), কারণ আর 1 এবং জি এর মধ্যে চেকিং এটির অনুমতি দেয় এবং আর 2 এবং জি এর মধ্যে যে চেকিং আগে হয়েছিল তা ভুলে যায়।

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

নোট করুন যে কোনও নির্দিষ্ট ফ্রেমে, বস্তুর (উদাহরণস্বরূপ জি) কেবলমাত্র এক দিক থাকতে পারে। (ওহ মানুষ, বয়ব্যান্ডের মতো শোনাচ্ছে ...)

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