الاستطلاعية الأساسية مع تجنب عقبة في الفضاء 2D المستمر

StackOverflow https://stackoverflow.com/questions/874875

سؤال

وأنا أكتب محاكاة فيه كائن مخلوق يجب أن تكون قادرة على التحرك نحو بعض وجوه تعسفي آخر في البيئة، والانزلاق نحو العقبات بدلا من القيام بأي الاستطلاعية ذكاء. أنا لا أسعى أن يكون ذلك خطة مسار - فقط للتحرك في الاتجاه العام واحد، وترتد حول العقبات

وانها بيئة 2D (عرض النفقات العامة)، وكل كائن يحتوي على المستطيل إحاطة للكشف عن الاصطدام. ليس هناك شبكة، وأنا لا أبحث عن A * حل.

وأنا لم تكن قادرة على العثور على أي دروس في هذا النوع من "غبية" الاستطلاعية على أساس الاصطدام، وبالتالي قد لا أكون واصفا هذه باستخدام المصطلحات الأكثر شيوعا.

وأي توصيات بشأن كيفية تنفيذ هذه (أو روابط لدروس)؟

هل كانت مفيدة؟

المحلول

والتوسع في ما قاله غيوم حول تجنب عقبة، وهي تقنية من شأنها أن تعمل بشكل جيد بالنسبة لك هو <وأ href = "http://www.ibm.com/developerworks/java/library/j-antigrav/" يختلط = " noreferrer "> الحركة المضادة للجاذبية . كنت تعامل العقبات المحلية كمصادر نقطة مضاد الجاذبية، الوجهة بالجاذبية، وسوف الطابع الخاص بك الكمبيوتر التي تسيطر عليها تنزلق (مثل الصابون!) حول العقبات للوصول إلى الوجهة.

نصائح أخرى

ويمكنك الجمع بين اثنين خوارزمية التوجيه:

طلب : تطبيق قوة القيادة في الاتجاه الذي هو الفرق بين السرعة الحالية والسرعة المطلوبة نحو الهدف

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

ويمكنك أن تجد أكثر على موقع " السلوكيات التوجيهية للأحرف الذاتية "

وبالنسبة

وغيوم

وPS: هذا افتراض كنت تستخدم نقطة / سرعة / طريقة تسريع لحركة الكائن

.

وربما يمكن استخدام خوارزمية تعهد في

وكلما مخلوق الخاص بك، والسفر في متجه اتجاه v، يصطدم بجدار الذي يمثله w ناقلات، والاتجاه التي تحتاج إلى "الانزلاق" يعطى عن طريق ناقلات وهذا هو إسقاط v على w الاتجاه. ويمكن الاطلاع على هذه باستخدام

  v . w
--------- w
 |w|*|w|

وحيث . هو نقطة المنتج و |w| هو حجم w ناقلات (= sqrt(w . w)). إذا w هو متجه الوحدة، ويصبح هذا ببساطة

(v . w) w

واستخدام ناقلات الناتجة عن السرعة مخلوق الخاص بك سوف يعني مخلوق بك يسافر بسرعة عندما فقط "الجروح" الجدار، وببطء عندما يضرب الجدار الميت على اساس تقريبا. (هذه هي الطريقة التي تدير معظم أول شخص مطلق النار ألعاب اصطدام لاعب البشري).

إذا كنت تريد بدلا من ذلك المخلوق ليسافر دائما بأقصى سرعة، ما عليك سوى علامة v . w - سوف دائما يكون السفر إما في اتجاه وجوه جدار (w) أو في الاتجاه المعاكس (-w)

والمشكلة التي سيكون لديك هو عندما مخلوق بك يضرب الجدار الميت على اساس. في هذه الحالة سوف يكون ناقلات بك المتوقع (0، 0)، وكنت بحاجة الى بعض تقنية أخرى لتحديد الطريقة التي (w أو -w) للذهاب. النهج المعتاد هنا هو A *، على الرغم من أن هذا قد يكون غير ضروري إذا بيئتك تمتلك بنية كافية.

ونشرت لي خوارزمية الاستطلاعية في C # في حين يعود

هنا هو ارتباط

ويمكنك محاولة واستخدامها كنقطة انطلاق، أي هل يمكن تعديل الدالة يتحقق الخلية التالية لمعرفة ما اذا كان صالحا للتحقق من العقبات، وكنت قد يطعمه فترات صغيرة بدلا من البداية والنهاية نقطة كيندا مثل طرق متعددة pahfinding مصغرة.

و(النص باللغة الإسبانية، ولكن يمكنك تنزيل التطبيق من خلال الرابط في الأعلى)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top