অপরিশোধিত সংঘর্ষ এড়ানো (স্টিয়ারিং) ব্যবহার করার সময় বস্তুগুলিকে সংঘর্ষে স্থানান্তর করা


9

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

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

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

অবজেক্ট ফরোয়ার্ড লাইনের স্ক্রিনশট।

আমি কীভাবে সংঘর্ষের স্থানটি সঠিকভাবে গণনা করতে পারি সে সম্পর্কে কারও কোনও পরামর্শ আছে? সম্ভবত কোনওভাবে দুটি বস্তুর আকার বিবেচনা করে?


মনে রাখবেন যে স্ক্রিনশটে সবুজ, লাল এবং নীল লাইনগুলি 3 ডি বিশ্বের কেবল অক্ষ।
জেমস বেডফোর্ড

উত্তর:


6

এটি এখন পর্যন্ত সেরা বল থেকে বল সংঘর্ষ শনাক্তকরণ নিবন্ধটি জুড়ে এসেছে।

পুল হল পাঠ: চেনাশোনা বা গোলকের মধ্যে দ্রুত, সঠিক সংঘর্ষ সনাক্তকরণ


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

@ জেমস সেই নিবন্ধটি আপনার সমস্যার সমাধান করবে। পৃষ্ঠা 2 দেখুন এবং আপনি "ভবিষ্যতে" সংঘর্ষের স্থানটি নির্ধারণ করতে আপনার এক গোলকের "বেগ" এর জন্য নির্বিচারে উচ্চ সংখ্যা ব্যবহার করতে পারেন।
টেট্রাড

ঠিক আছে - এটি পরীক্ষা করে দেখুন না বলে দুঃখিত, এটি দেখতে বেশ সুন্দর দেখাচ্ছে! আমি একবার এটি পড়েছিলাম আপনার কাছে ফিরে যেতে হবে। ধন্যবাদ :)
জেমস বেডফোর্ড

1
আমি কি কেবল "ব্যাঙ্ক শট: দুটি চলন্ত চেনাশোনাগুলির মধ্যে সংঘর্ষ" বিভাগের অধীনে পৃষ্ঠায় 2 এ স্পষ্ট করে বলতে পারি, এর অর্থ হল আপনার প্রথম বৃত্তের বেগের পরিবর্তে অ্যালগরিদমে দুটি বৃত্তের বেগের মধ্যে পার্থক্যটি ব্যবহার করা উচিত ? (দ্বিতীয় বৃত্তের বেগটি অ্যালগরিদমের स्थिर সংস্করণে ব্যবহৃত হয় না)) এই বিটটি আমার কাছে এতটা পরিষ্কার ছিল না। ধন্যবাদ।
জেমস বেডফোর্ড

0

আপনি নিকটতম বিন্দু সন্ধান করতে চান না।

উভয় গোলকের সম্মিলিত রেডিয়ির সমান দূরত্বের রেখায় আপনি সেই বিন্দুটি সন্ধান করতে চান।


আহ, ঠিক আছে! আপনি কি জানেন যে আমি কীভাবে এটি গাণিতিকভাবে বের করতে পারি ..?
জেমস বেডফোর্ড

0

যদি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি কেবল স্পেকের বনাম স্পিয়ার ছেদ পরীক্ষা পরীক্ষা করতে পারবেন, যেমন অ্যাটাকিংহোবোর পরামর্শ দিয়েছে।

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

চেক করার সূত্রটি এরকম কিছু হয়:

distanceOfSpheres <= sumOfRadii^2

আপনার একটি গোলক বনাম গোলক ছেদ রয়েছে। এটি বেশ সহজ, কোডে এটি দেখতে কেমন তা দেখি!

bool sphereIntersectTest(BoundingSphere* s1, BoundingSphere* s2)
{
   Vector3 distance;

   // Get the distance between each sphere, center is a Vector3 type
   distance = (s1->center - s2-> center);

   // Determine the sum of both radii
   float radii = (s1->radius + s2->radius);

   // Determine if we have an intersection
   if (distance.length <= (radii * radii))
      return true;
   else
      return false;
}

আবার, আমি মনে করি যে এটি আপনি সঠিক উত্তর খুঁজছেন হতে পারে। যদি কেউ জানে যে এটি ভুল, দয়া করে আমাকে সংশোধন করুন, যেহেতু আমি এই গণিতটি করেছি বেশ কিছুদিন পরে।


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

0

ঠিক আছে, আশা করি এটি অর্থবোধক ... বলগুলির ভেক্টরগুলি পান এবং তাদের সংঘর্ষের পয়েন্ট গণনা করুন, এই পি 1 কল করুন। 2 টি ভেক্টরের মধ্যে কোণটি খুঁজুন, এটিকে 1 এ কল করুন। এ 1/2 এ একটি লাইন আঁকতে, এটি দুটি ভেক্টরের মধ্যবর্তী ডিগ্রিতে ঠিক মাঝখানে থাকবে। আপনার এই লাইনের অবস্থানের দরকার যেখানে পাপ (a1 / 2) = (ব্যাসার্ধ 1 + ব্যাসার্ধ 2) / 2। এই ছবিটি যদি আমার মাথার ডানদিকে দৃশ্যমান হয় তবে সংঘর্ষটি এখানেই ঘটে। দুঃখিত যদি এটি ভুল হয় ... দেরীতে।

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