خوارزمية كشف التصادم

تعد خوارزمية المسافة Gilbert-Johnson-Keerthi طريقة لتحديد الحد الأدنى للمسافة بين مجموعتين محدبتين . على عكس العديد من خوارزميات المسافة الأخرى ، فإنه لا يتطلب تخزين بيانات الهندسة في أي تنسيق محدد ، ولكن بدلاً من ذلك يعتمد فقط على وظيفة دعم لإنشاء تكرارات بسيطة أقرب إلى الإجابة الصحيحة باستخدام مجموع Minkowski (CSO) لشكلين محدبين.

هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر مغاير للذي أنشأها؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. يمكن أيضاً تقديم طلب لمراجعة المقالة في الصفحة المُخصصة لذلك. (يونيو 2019)
يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوقة. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (يونيو 2019)

تستخدم خوارزميات "GJK المحسّنة" معلومات الحافة لتسريع الخوارزمية باتباع الحواف عند البحث عن البساط التالي. هذا يحسن الأداء إلى حد كبير لل polytopes مع أعداد كبيرة من الرؤوس.

غالبًا ما تستخدم خوارزميات GJK بشكل متزايد في أنظمة المحاكاة وألعاب الفيديو. في هذا الوضع ، يتم استخدام simplex النهائي من حل سابق كتخمين أولي في التكرار التالي ، أو "إطار". إذا كانت المواضع في الإطار الجديد قريبة من تلك الموجودة في الإطار القديم ، فسوف تتقارب الخوارزمية في تكرار واحد أو اثنين. ينتج عن ذلك أنظمة الكشف عن التصادم التي تعمل في وقت شبه ثابت.

ثبات الخوارزمية والسرعة ومساحة التخزين الصغيرة تجعله شائعًا لاكتشاف التصادم في الوقت الفعلي ، وخاصة في محركات الفيزياء لألعاب الفيديو .

نظرة عامة

يعتمد GJK على وظيفتين:

  • خطأ رياضيات (خطأ في الصياغة): {\displaystyle <mrow class="MJX-TeXAtom-ORD"><mstyle displaystyle="true" scriptlevel="0"><mrow class="MJX-TeXAtom-ORD"><mi mathvariant="normal"> <math>\mathrm{Support}(\mathrm{shape}, \vec{d})} </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi></mrow><mo stretchy="false"> </mo><mrow class="MJX-TeXAtom-ORD"><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi></mrow><mo> </mo><mrow class="MJX-TeXAtom-ORD"><mrow class="MJX-TeXAtom-ORD"><mover><mi> </mi><mo stretchy="false"> </mo></mover></mrow></mrow><mo stretchy="false"> </mo></mstyle></mrow> </math> </img> ، والتي ترجع النقطة على shape والتي لديها أعلى نقطة المنتج مع خطأ رياضيات (خطأ في الصياغة): {\displaystyle <mrow class="MJX-TeXAtom-ORD"><mstyle displaystyle="true" scriptlevel="0"><mrow class="MJX-TeXAtom-ORD"><mrow class="MJX-TeXAtom-ORD"><mover><mi> <math>\vec{d}} </mi><mo stretchy="false"> </mo></mover></mrow></mrow></mstyle></mrow> </math> </img> .
  • خطأ رياضيات (خطأ في الصياغة): {\displaystyle <mrow class="MJX-TeXAtom-ORD"><mstyle displaystyle="true" scriptlevel="0"><mrow class="MJX-TeXAtom-ORD"><mi mathvariant="normal"> <math>\mathrm{NearestSimplex}(s)} </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi><mi mathvariant="normal"> </mi></mrow><mo stretchy="false"> </mo><mi> </mi><mo stretchy="false"> </mo></mstyle></mrow> </math> </img> ، والتي تأخذ simplex s وتُرجع simplex على s الأقرب إلى الأصل ، واتجاهًا نحو الأصل طبيعيًا إلى simplex الجديد. إذا كانت s نفسها تحتوي على الأصل ، فإن NearestSimplex يقبل s ويتم تحديد الشكلين على التقاطع.

قد تكون NearestSimplex التي تتم معالجتها بواسطة NearestSimplex أي مساحة فرعية بسيطة لـ Rn . على سبيل المثال ، في ثلاثي الأبعاد ، قد تكون نقطة أو مقطع خط أو مثلث أو رباعي السطوح ؛ يتم تحديد كل نقطة بمقدار 1 أو 2 أو 3 أو 4 نقاط على التوالي.

شبة الكود

function GJK_intersection(shape p, shape q, vector initial_axis):
       vector  A = Support(p, initial_axis) - Support(q, -initial_axis)
       simplex s = {A}
       vector  D = -A
       loop:
           A = Support(p, D) - Support(q, -D)
           if dot(A, D) < 0:
              reject
           s = s ∪ A
           s, D, contains_origin = NearestSimplex(s)
           if contains_origin:
              accept

توضيح

نوعان من الاصطدام ووجه CSO المقابل: قمة الرأس (أعلى) وحافة الحافة (أسفل).

روابط خارجية

  • بوابة رياضيات
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.