बिना रुके टकराव परिहार (स्टीयरिंग) का उपयोग करते समय हिलने वाली वस्तुएं


9

मुझे लगता है कि मैं एक दुर्लभ मामला है के लिए unaligned टक्कर परिहार के साथ परेशानी हो रही है। मैंने दो वस्तुओं को एक दूसरे की ओर बढ़ने के लिए निर्धारित किया है, लेकिन थोड़ी सी भी ऑफसेट के साथ, इसलिए वस्तुओं में से एक थोड़ा ऊपर की ओर बढ़ रहा है, और एक वस्तु थोड़ी नीचे की ओर बढ़ रही है।

मेरे अविभाजित टक्कर परिहार स्टीयरिंग एल्गोरिथ्म में मुझे ऑब्जेक्ट की फॉरवर्ड लाइन पर पॉइंट्स मिल रहे हैं और दूसरी ऑब्जेक्ट की फॉरवर्ड लाइन जहां ये दो लाइन सबसे नजदीक हैं। यदि ये निकटतम बिंदु टकराव से बचने की दूरी के भीतर हैं, और यदि उनके बीच की दूरी दो ऑब्जेक्ट के दो रेडी की सीमा के गोले से छोटी है, तो वस्तुओं को उचित दिशा में दूर जाना चाहिए।

समस्या यह है कि मेरे मामले के लिए, लाइनों पर निकटतम बिंदुओं की गणना वास्तविक टकराव बिंदु से बहुत दूर होने के लिए की जाती है। ऐसा इसलिए है क्योंकि प्रत्येक वस्तु के लिए दो आगे की रेखाएं एक दूसरे से दूर जा रही हैं क्योंकि ऑब्जेक्ट गुजरते हैं। समस्या यह है कि इस वजह से, कोई स्टीयरिंग नहीं होता है, और दो ऑब्जेक्ट आंशिक रूप से टकराते हैं।

ऑब्जेक्ट फॉरवर्ड लाइनों का स्क्रीनशॉट।

क्या किसी के पास कोई सुझाव है कि मैं कैसे टकराव के बिंदु की सही गणना कर सकता हूं? शायद किसी भी तरह से दो वस्तुओं के आकार को ध्यान में रखकर?


ध्यान दें कि स्क्रीनशॉट में, हरे, लाल और नीले रंग की लाइनें 3 डी दुनिया की धुरी हैं।
जेम्स बेडफोर्ड

जवाबों:


6

यह अब तक की सबसे बेहतरीन गेंद से बॉल टकराने का पता लगाने वाला लेख है जो मैं सामने आया हूं।

पूल हॉल सबक: फास्ट, सटीक टकराव का पता लगाने के बीच सर्किल या क्षेत्रों


मुझे पता है कि कैसे एक गोला-गोला टक्कर परीक्षण करना है। मेरी समस्या उस स्थिति को खोजने की कोशिश कर रही है जहां भविष्य में यह टकराव होगा। धन्यवाद।
जेम्स बेडफोर्ड

@ उस लेख से आपकी समस्याओं का समाधान होगा। पृष्ठ 2 को देखें और आप टकराव बिंदु "भविष्य में" निर्धारित करने के लिए अपने क्षेत्रों में "वेग" के लिए मनमाने ढंग से उच्च संख्या का उपयोग कर सकते हैं।
तेतराड

ठीक है - यह जाँच नहीं करने के लिए खेद है, यह बहुत अच्छा लग रहा है! इसे पढ़ते ही मुझे आपके पास वापस जाना होगा। धन्यवाद :)
जेम्स बेडफोर्ड

1
क्या मैं केवल यह स्पष्ट कर सकता हूं कि "बैंक शॉट: दो चलती मंडली के बीच टकराव" खंड के तहत पेज 2 पर, इसका मतलब है कि आपको पहले सर्कल के वेग के बजाय एल्गोरिथ्म में दो सर्कल के वेग के बीच के अंतर का उपयोग करना चाहिए ? (एल्गोरिथ्म के स्थिर संस्करण में दूसरे सर्कल के वेग का उपयोग नहीं किया गया है।) यह बिट मेरे लिए इतना स्पष्ट नहीं था। धन्यवाद।
जेम्स बेडफोर्ड

0

आप निकटतम बिंदु नहीं खोजना चाहते हैं।

आप उन बिंदुओं पर बिंदु ढूंढना चाहते हैं जहां दूरी दोनों क्षेत्रों के संयुक्त रेडी के बराबर है।


आह अच्छा! क्या आप जानते हैं कि मैं इसे गणितीय रूप से कैसे समझ सकता हूं ..?
जेम्स बेडफोर्ड

0

अगर मैं आपके प्रश्न को सही ढंग से समझ रहा हूं तो आप बस एक क्षेत्र बनाम क्षेत्र प्रतिच्छेदन परीक्षण का उपयोग कर सकते हैं, जैसे कि AttackingHobo ने सुझाव दिया है।

इस तरह की परीक्षा करने के लिए गणित इस प्रकार है (मुझे गलत समझें तो यह सही है, थोड़ी देर हो गई है)। इसके अलावा, यह विचार कर रहा है कि आपके क्षेत्रों में एक केंद्र और एक त्रिज्या चर है।

जाँच का सूत्र कुछ इस प्रकार है:

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

ठीक है, उम्मीद है कि यह समझ में आता है ... गेंदों के वैक्टर प्राप्त करें और उनकी टक्कर बिंदु की गणना करें, इस p1 को कॉल करें। 2 वैक्टर के बीच का कोण ज्ञात करें, इसे a1 कहें। ए 1/2 पर एक रेखा खींचना, यह दो वैक्टर के बीच डिग्री के सटीक मध्य में होगा। आपको इस पंक्ति पर स्थान की आवश्यकता है जहां पाप (a1 / 2) = (त्रिज्या + त्रिज्या 2) / 2। यदि इस चित्र को मेरे सिर में ठीक से देखा गया है, तो यह वह जगह है जहां टकराव होता है। क्षमा करें यदि यह गलत है ... इसके देर से।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.