EDIT / UPDATE: अभी मेरा सबसे बड़ा सवाल यह है कि क्या चरण 3 का "t = ..." समीकरण एक अच्छा विचार है या इसे करने का एक बेहतर तरीका है। अधिकांश अन्य मुद्दों को आंशिक या पूर्ण रूप से संबोधित किया गया है, लेकिन इस मुद्दे पर कोई टिप्पणी या उत्तर वास्तव में नहीं आया है। फिर, एक विश्लेषणात्मक समाधान की आवश्यकता है, वेग और दूरियां बहुत बड़ी हैं, और वस्तुएं बहुत छोटी हैं, किसी भी पुनरावृत्ति / पुनरावर्ती समाधान के लिए (कुछ टिप्पणियों में नीचे सुझाव दिए गए हैं) जो मैं सोच सकता हूं (हालांकि अगर वहाँ है एक विशेष पुनरावृत्ति / पुनरावर्ती समाधान जो इस प्रकार की स्थितियों को ठीक से संभाल लेगा फिर मैं निश्चित रूप से इसके लिए खुला हूं)। आपकी मदद के लिए अब तक बहुत-बहुत धन्यवाद, आप सभी बहुत बढ़िया हैं और मैं वास्तव में आपके विचारों और मदद की सराहना करता हूं!
मैं छोटी, उच्च गति वाली वस्तुओं के बीच टकराव का पता लगाने की कोशिश कर रहा हूं। यह एक ऐसी स्थिति है, जहां अपेक्षाकृत कम गति पर भी टनलिंग बहुत आसानी से हो सकती है।
रे कास्टिंग काम नहीं करेगी, क्योंकि यह दो उच्च गति वाली वस्तुओं के बीच टकराव का पता लगा रही है, न कि एक वस्तु और एक स्थिर दीवार के बीच। (जब तक कि मैं किरण की गलतफहमी नहीं कर रहा हूँ?) प्रदर्शन बहुत विचार योग्य है; यदि संभव हो तो, मैं एक बड़े प्रदर्शन हिट से बचना चाहता हूं। मेरे पास पहले से ही एक कार्यात्मक और बहुत प्रभावी क्वाड्री ( http://en.wikipedia.org/wiki/Quadtree ) लागू है, इसलिए मैं नीचे बताए अनुसार इसे संशोधित और उपयोग करूंगा।
संपादित करें: समय अंतराल को कम करने से काम नहीं चलेगा। इस समाधान के लिए गति बहुत अधिक है, जिसका अर्थ है कि प्रदर्शन हिट बहुत शानदार होगा, जबकि सुरंग के टकराव के विशाल बहुमत को अभी भी गायब है । (उदाहरण के लिए, मेरे पास एक वस्तु हो सकती है जिसका आकार लगभग 1 इकाई है जो लाखों यूनिट प्रति समय अंतराल में मापा जाता है ...
प्रस्तावित समाधान:
चरण 1:
प्रत्येक ऑब्जेक्ट के आंदोलन के चारों ओर एक बॉक्स बनाएं, फिर संभावित टकरावों की प्रारंभिक सूची बनाने के लिए उन बॉक्स को क्वाडट्री में खिलाएं। निम्न छवि देखें (यह छवि एक वृत्त वस्तु को एक स्थिति से दूसरी स्थिति में ले जाती है, और एक आयत उत्पन्न करने वाली गति है, जिसे क्वाडट्री में खिलाया जाएगा):
चरण 2: (इस चरण को छोड़ना चाह सकते हैं?)
क्वाडट्री द्वारा उत्पन्न संभावित टक्करों की सूची के माध्यम से जाना। देखें कि क्या आयतें प्रत्येक संभावित टकराव में अंतर करती हैं। यदि हां, तो चरण 3 पर आगे बढ़ें।
संपादित करें: नीचे, शॉन मिडिलडविच ने स्वेप्ट वॉल्यूम / कैप्सूल के चौराहे (यदि ऑब्जेक्ट हलकों हैं) का उपयोग करने का सुझाव दिया। यह तीन विकल्प छोड़ता है: 1) चरण 2 को पूरी तरह से छोड़ दें। २) चरण २ मेरा मार्ग करो। 3) इसे शॉन के रास्ते से करें। सीन का तरीका मेरे बॉक्स आइडिया की तुलना में अधिक कम्प्यूटेशनल रूप से महंगा होगा, हालांकि यह मेरे रास्ते से अधिक झूठी सकारात्मकता को खत्म करेगा, उन्हें अंतिम चरण तक पहुंचने से रोकता है।
क्या कोई भी अनुभव से बोल सकता है कि इन 3 विकल्पों में से कौन सा विकल्प सबसे अच्छा है? (मैं कुछ अलग चीज़ों के लिए इस भौतिकी इंजन का उपयोग करने का इरादा रखता हूं, इसलिए मैं "आम तौर पर सबसे अच्छा" समाधान की तलाश कर रहा हूं जो कि विभिन्न प्रकार की स्थितियों में सबसे तेज़ काम करता है, न कि केवल एक विशिष्ट परीक्षण मामला जिसमें मैं आसानी से माप सकता हूं कि कौन सा समाधान सबसे तेज है)।
चरण 3:
नीचे t = समीकरण का उपयोग करें, यदि विभेदक (यानी वर्गमूल के नीचे का हिस्सा) नकारात्मक या 0 है, तो कोई टकराव नहीं, यदि सकारात्मक है तो टक के समय के रूप में t मान का उपयोग करें (जिसके बाद तदनुसार पदों को समायोजित करना आसान है। .. यदि दोनों वस्तुओं के टकराने के बाद भी अस्तित्व बना रहे)। समीकरण:
t = (-1/2 sqrt ((2 a w-२ a x + २ b y-२ b z-२ c w + २ c x-२ d y + २ dz) ^ 2-4 (w ^ 2- 2- 2 w x + x ^ 2 + y ^ 2-2 y z + z ^ 2) (^ 2-2 a c + b ^ 2-2 b d + c ^ 2 + d ^ 2-r ^ 2-2 r ss ^ 2)) - a w + a xb y + b z + c wc x + d yd z) / (w ^ 2-2 w x + x ^ 2 + y ^ 2-2 y z + z ^ 2 ) का है ।
जहाँ (1 और 2 का उपयोग ऑब्जेक्ट 1 और 2 को दर्शाने के लिए किया जाता है):
t 0 और -1 के बीच एक नकारात्मक समय मान है, जहां 0 वर्तमान फ्रेम है, और -1 पिछला फ्रेम है;
a = x स्थिति 1;
बी = वाई स्थिति 1;
सी = एक्स स्थिति 2;
d = y स्थिति 2;
w = x वेग 1;
x = x वेग 2;
y = y वेग 1;
z = y वेग 2;
आर = त्रिज्या 1;
s = त्रिज्या 2;
व्युत्पत्ति: (^ 2 का अर्थ है चुकता)
वस्तुओं के गतियों के लिए पैरामीट्रिक समीकरण (उदाहरण के लिए, newxpos1 = a + t w) लें और उन्हें दूरी सूत्र (दोनों पक्षों को विभाजित करते हुए) में प्लग करें: दूरी सूत्र चुकता = (a + t w - (c + t x)) ^ 2 + (b + t y - (d + t * z)) ^ 2। याद रखें, टी नकारात्मक होने वाली है। दो गोलाकार वस्तुओं के टकराने का समय ज्ञात करने के लिए हम बाईं ओर (r + s) ^ 2 के बराबर सेट करते हैं। द्विघात समीकरण (और बहुत थकाऊ बीजगणित का एक बड़ा सौदा) का उपयोग करके टी के लिए समाधान, हम उपरोक्त "टी = ..." समीकरण प्राप्त करते हैं।
मेरे सवाल:
1) क्या यह इसे करने का एक अच्छा तरीका है? क्या यह बिल्कुल काम करेगा? मैं किसी भी अप्रत्याशित मुद्दों में भाग जा रहा हूँ? (मुझे पता है कि जब मैं एक समय में 2 से अधिक वस्तुओं से टकराता हूं, तो मुझे परेशानी होने वाली है, लेकिन मुझे इस मामले में कोई फर्क नहीं पड़ता कि मुझे वास्तव में उस पर आपत्ति है, जब उनके पास कम सापेक्ष वेग हैं (यदि सापेक्ष वेग अधिक हैं तब एल्गोरिथ्म देता है "नासमझ" समाधान "काफी अच्छा" होगा, और एक मानव के लिए त्रुटि को देखना असंभव होगा), और यदि 2 से अधिक समान समय-चरण में कम सापेक्ष वेगों से टकराते हैं, तो अधिकांश समाधान होंगे वैसे भी काफी करीब हो सकता है, क्योंकि मैं एक योजनाबद्ध अयोग्य टकराव के कारण नहीं है)
2) क्या मेरे प्रदर्शन से बहुत नुकसान होगा? मुझे नहीं लगता कि यह होगा, लेकिन अगर यह होगा, तो क्या यह करने का एक बेहतर तरीका है?
3) क्या मुझे चरण 2 को छोड़ देना चाहिए और चरण 1 से 3 तक सीधे जाना चाहिए? स्पष्ट रूप से चरण 2 महत्वपूर्ण नहीं है, लेकिन यह प्रदर्शन में मदद कर सकता है (या इसे सहेजने की तुलना में अधिक सीपीयू समय खर्च हो सकता है)।
अन्य सभी टिप्पणियाँ, सुझाव, या आलोचना बहुत स्वागत है। आपके सहयोग के लिए धन्यवाद!