बाउंडिंग क्षेत्र शायद आपको कई चलती वस्तुओं के साथ मदद करेगा; आप ऑब्जेक्ट के त्रिज्या वर्ग की गणना करते हैं, और इसे अपने केंद्र से ट्रैक करते हैं। यदि दो वस्तुओं के केंद्रों के बीच वर्ग दूरी दो वस्तुओं की वर्ग वाली त्रिज्या के योग से कम है, तो आपके पास संभावित टक्कर है। स्क्वायर दूरी के साथ सब कुछ किया; कोई वर्ग जड़ों नहीं।
आप अपने ऑब्जेक्ट्स के बीच न्यूनतम वर्ग दूरी से निकटतम पड़ोसियों को सॉर्ट कर सकते हैं। टकराव का पता लगाना जटिल हो सकता है, ज़ाहिर है, और गैर-गोलाकार रूप से आकार की वस्तुओं के साथ, बाउंडिंग क्षेत्र आपको टकराव की जानकारी नहीं ले पाएगा, लेकिन यह आपके ऑब्जेक्ट के पेड़ को बहुत अच्छी तरह से टकराव के लिए तुलना करने की आवश्यकता है।
आपको अपने ऑब्जेक्ट के केंद्र को ट्रैक करने के लिए निश्चित रूप से आवश्यकता होगी; और आदर्श रूप से आप बाध्यकारी क्षेत्र के आकार को फिर से समझने से बचने के लिए प्रत्येक वस्तु को कठोर होना चाहते हैं (हालांकि पुनर्मूल्यांकन विशेष रूप से कठिन नहीं है, विशेष रूप से यदि आप कठोर वस्तुओं के पेड़ का उपयोग करते हैं, तो प्रत्येक वस्तु के लिए अपने स्वयं के बाध्यकारी क्षेत्र के साथ गैर कठोर हैं, लेकिन यह जटिल हो जाता है)।
मूल रूप से, डेटा संरचनाओं के बारे में आपके प्रश्न का उत्तर देने के लिए, आप अपनी सभी वस्तुओं को मास्टर सरणी में रख सकते हैं; मेरे पास "क्षेत्र" सरणी का एक सेट होगा जिसमें मास्टर सरणी में ऑब्जेक्ट्स के संदर्भ शामिल होंगे जो आप ऑब्जेक्ट को अपने कार्टेशियन निर्देशांक के आधार पर जल्दी से क्रमबद्ध कर सकते हैं; "क्षेत्र" सरणी में आपके मास्टर ऑब्जेक्ट सरणी में कम से कम 2x सबसे बड़ा ऑब्जेक्ट त्रिज्या परिभाषित किया जाना चाहिए (यदि यह व्यवहार्य है; ऑब्जेक्ट बाउंडिंग क्षेत्र स्केलिंग बनाम ऑब्जेक्ट्स की संख्या स्पष्ट रूप से ऊपर आती है)
एक बार आपको यह मिल गया है, आप एक क्षेत्र के भीतर सभी वस्तुओं की दूरी की तुलना करके एक त्वरित टकराव परीक्षण कर सकते हैं; फिर, यह वह जगह है जहां क्षेत्र परिभाषा महत्वपूर्ण हो जाती है, क्योंकि आप संख्याओं के क्षेत्रों की संख्या का महत्वपूर्ण व्यापार कर रहे हैं तुलनात्मक रूप से। हालांकि, यह थोड़ा आसान है क्योंकि आपकी दूरी तुलना सरल घटाव (और abs() संचालन के लिए नीचे आती है)
बेशक, आपको अपने गैर-गोलाकार के बीच वास्तविक टकराव का पता लगाना होगा वस्तुओं, और यह गैर टी नहीं हो सकता है rivial, लेकिन आप उस बिंदु पर बहुत ही नाटकीय रूप से संभावित तुलना की संख्या कम कर दिया है।
असल में, यह दो-स्तरीय प्रणाली है; पहला क्षेत्र सरणी है, जिससे आप अपने दृश्य पर एक मोटा प्रकार करते हैं। दूसरा, आपके पास अंतर-क्षेत्र दूरी की तुलना है; जिसमें आप अपने मूल टकराव का पता लगाने और टकराव की वस्तुओं पर टकराव करने जा रहे हैं।
शायद इस क्षेत्र के एल्गोरिदम में आपके क्षेत्र के आकार को गति देने के लिए गतिशील क्षेत्र निर्धारण में वृक्षों के उपयोग के लिए कमरा है ताकि यह सुनिश्चित किया जा सके कि आपका क्षेत्र का आकार "भीड़ वाले" क्षेत्रों के साथ तेजी से नहीं बढ़ता है; हालांकि, इस तरह की चीज गैर-तुच्छ है, क्योंकि विभिन्न आकारों की वस्तुओं के साथ, घनत्व पर आपका प्रकार कम से कम कहने के लिए जटिल हो जाता है।
मैं समझता हूं कि गोलाकारों का उपयोग टकराव परीक्षण थोड़ा तेज़ कर देगा, और क्षेत्र विभाजन विभाजन का उपयोग करके और तुलना की मात्रा को सीमित कर देगा, लेकिन आपको इन "क्षेत्रों" को दोबारा बदलना होगा और यह धीमा है? मैं एक डेटा संरचना की तलाश में हूं जो अपने "क्षेत्रों" को तेजी से अपडेट कर सकता है। – esiegel