अपने ब्रह्मांड पूर्णांक है, या यदि परिशुद्धता के स्तर में अच्छी तरह से जाना जाता है और बहुत अधिक नहीं है, तो आप से abelsson के सुझाव का उपयोग कर सकते हैं धागा, हे (1) रंग का उपयोग कर देखने का उपयोग कर:
सबसे पहले, माइक्रो समस्या। आपके पास मनमाने ढंग से घुमावदार आयताकार है, और बिंदु है। आयताकार के अंदर बिंदु क्या है?
ऐसा करने के कई तरीके हैं। लेकिन सबसे अच्छा, मुझे लगता है, 2 डी वेक्टर क्रॉस उत्पाद का उपयोग कर रहा है। सबसे पहले, सुनिश्चित करें कि आयताकार के बिंदु को घड़ी के क्रम में संग्रहीत किया जाता है। फिर वेक्टर क्रॉस उत्पाद 1) वेक्टर पक्ष और 2 के दो बिंदुओं द्वारा गठित किया गया है) परीक्षण बिंदु पर पक्ष के पहले बिंदु से वेक्टर। परिणाम के संकेत देखें - सकारात्मक पक्ष के अंदर (दाईं ओर) नकारात्मक है। यदि यह के अंदर सभी चार तरफ है, तो यह आयताकार के अंदर है। या समकक्ष, यदि यह किसी भी पक्ष के बाहर है, तो यह आयताकार के बाहर है। More explanation here।
इस विधि हर पक्ष के लिए 2 वैक्टर, प्लस हर पक्ष के लिए एक उत्पाद पार जो तीन गुणा करता है और दो कहते प्रति वेक्टर 3 घटाता ले जाएगा * गुना।11 प्रति तरफ फ्लॉप, 44 फ्लॉप प्रति आयताकार।
आप पार उत्पाद पसंद नहीं है, तो आप की तरह कुछ कर सकता है: आंकड़ा बाहर उत्कीर्ण और प्रत्येक आयत के लिए घिरा हलकों, देखें कि क्या खुदा एक के अंदर बिंदु। यदि ऐसा है, तो यह आयताकार में भी है। यदि नहीं, तो जांचें कि यह आयताकार के बाहर है। यदि ऐसा है, तो यह आयताकार के बाहर भी है। यदि यह के बीच दो मंडलियों के बीच आता है, तो आप f **** d हैं और आप को इसे कठिन तरीके से जांचना है।
अगर एक बिंदु 2 डी में एक चक्र अंदर है ढूँढना दो subtractions और दो squarings (= पलता) लेता है, और फिर आप दूरी एक वर्गमूल क्या करने वाले से बचने के लिए चुकता की तुलना करें। यह 4 फ्लॉप है, बार दो सर्किल 8 फ्लॉप हैं - लेकिन कभी-कभी आपको अभी भी पता नहीं चलेगा। इसके अलावा इस मानता है कि आप घिरा या खुदा हलकों, जो या सच कितना पूर्व अभिकलन आप अपने आयत सेट पर करने के लिए तैयार कर रहे हैं पर निर्भर करता है नहीं हो सकता गणना करने के लिए भुगतान नहीं करते हैं किसी भी CPU समय ।
किसी भी घटना में, यह शायद एक महान विचार हर आयत के खिलाफ बिंदु परीक्षण करने के लिए नहीं है, खासकर यदि आप उनमें से एक सौ करोड़ की है।
जो हमें मैक्रो समस्या में लाता है। सेट में प्रत्येक एकल आयत के खिलाफ बिंदु का परीक्षण करने से कैसे बचें? 2D में, यह शायद quad-tree समस्या है। 3 डी में, जेनेरिक_handle ने कहा - एक ऑक्टेट्री। मेरे हेड के शीर्ष पर, मैं इसे B+ tree के रूप में लागू कर दूंगा। यह डी = 5, का उपयोग करने के लिए मोहक है ताकि प्रत्येक नोड में 4 बच्चे हो सकें, क्योंकि यह नक्शा क्वाड-पेड़ अमूर्तता पर बहुत अच्छी तरह से मानचित्र करता है। लेकिन अगर आयताकारों का सेट पर बहुत बड़ा है, तो मुख्य स्मृति में फिट नहीं है ( इन दिनों बहुत अधिक संभावना नहीं है), तो उसी आकार के रूप में नोड्स को डिस्क ब्लॉक के रूप में जाने का तरीका है।
कष्टप्रद पतित के लिए मामलों से सावधान रहें, एक ही सटीक बिंदु पर केन्द्रों के साथ दस हजार लगभग समान आयतों है कि कुछ डेटा सेट की तरह। : पी
यह समस्या क्यों महत्वपूर्ण है? यह कंप्यूटर ग्राफिक्स में उपयोगी है, जांचने के लिए यदि कोई किरण बहुभुज को छेड़छाड़ करती है। आईई, क्या उस स्निपर राइफल ने आपको शॉट किया था जिस व्यक्ति को आप पर शूटिंग कर रहे थे? इसका उपयोग रीयल-टाइम मानचित्र सॉफ़्टवेयर में भी किया जाता है, जैसे कि जीपीएस इकाइयां। जीपीएस आपको निर्देशांक बताता है कि आप पर हैं, लेकिन नक्शा सॉफ़्टवेयर को यह पता लगाना है कि उस बिंदु पर डेटा की एक बड़ी मात्रा में है, और इसे प्रति सेकंड कई बार करें।
क्या आपके आयत के किनारे अक्ष के साथ गठबंधन हैं, या वे अक्षों के मनमानी कोणों पर उन्मुख हैं? –
वे सभी गठबंधन हैं, कोई रोटेशन नहीं है या – pafcu
की तरह कुछ भी फैंसी आयताकार ओवरलैप करते हैं? –