हेक्साहेड्रल कोशिकाओं के एक असंरचित जाल के संबंध में अंकों के एक बादल को सॉर्ट करें


11

सवाल

आप हेक्साहेड्रल कोशिकाओं के एक असंरचित जाल के संबंध में अंकों के एक बादल को कैसे सॉर्ट करेंगे?

प्रत्येक सेल में इसका प्रतिनिधित्व करने के लिए एक केंद्र और एक अनूठा लेबल होता है। मूल रूप से दो बादल बिंदु हैं (मूल बिंदु बादल, और सेल केंद्रों का एक बिंदु बादल), लेकिन सेल ज्यामिति की जानकारी (बाउंडिंग बॉक्स) उपयोग की हो सकती है, मुझे यकीन नहीं है।

परिणाम

मैंने साहित्य के माध्यम से कुछ पूछने और खोजने की कोशिश की है:

यदि जाल हेक्साहेड्रल और असंरचित है, तो समस्या एक ऑर्थोगोनल रेंज खोज में कम हो जाती है। इस प्रयोजन के लिए, kd पेड़ों का सबसे अधिक उपयोग किया जाता है। यदि एक ऑक्ट्री डेटा संरचना के आधार पर मेष को परिष्कृत किया जाता है, तो इसके चारों ओर रेंज सर्च एल्गोरिदम बनाया जा सकता है। लक्ष्य सीधे मेष ज्यामिति से निपटने और बिंदु बादल A - बिंदु बादल संबंध B. बिंदु बादल A: क्वेरी बिंदु, बिंदु बादल B: जाल सेल केंद्रों पर ध्यान केंद्रित करने से है।


क्या आप यह स्पष्ट कर सकते हैं कि जब आप "किसी भी तरह के (मेष) के संबंध में" कहते हैं, तो आपका क्या मतलब है? क्या आप एक बिनिंग एल्गोरिथ्म की तलाश कर रहे हैं, (प्रत्येक सेल में कितने बिंदु हैं)?
स्ज़बोलॉक्स

मैं आपके प्रश्न को बिल्कुल स्पष्ट रूप से नहीं समझ पा रहा हूं कि अंक छांटने का लक्ष्य क्या है? जैसे जाल को और अधिक नियमित करना?
शुहाओ काओ

असंरचित आयतन जाल के चारों ओर एक अलग बिंदु बादल बिखरा हुआ है। मुझे सेल केंद्रों से बिंदु क्लाउड और इसके विपरीत डेटा संवाद करने की आवश्यकता है।
19

1
@ टोमिस्लाव-मारिक: क्या आप कृपया उत्तर के रूप में अपना समाधान लिख सकते हैं, और फिर अपना स्वयं का उत्तर स्वीकार कर सकते हैं? यह प्रक्रिया आम तौर पर "[सॉल्वड]" टैग को प्रश्न में जोड़ने के बजाय अपने स्वयं के प्रश्न का प्रभावी ढंग से जवाब देने के लिए स्वीकृत अभ्यास है; इसके अलावा, यह आपको अधिक प्रतिष्ठा अर्जित करेगा, क्योंकि लोग आपके उत्तर को बढ़ा सकते हैं।
ज्योफ ऑक्सीबेरी

जवाबों:


8

महत्वपूर्ण नोट: यह उत्तर वास्तविक प्रश्न का उत्तर नहीं देता है , लेकिन इसे प्रति अनुरोध के अनुसार हटा दिया गया था। शर्मनाक तरीके से मैंने हेक्साहेड्रल और हेक्सागोनल को भ्रमित किया। यह सवाल 3 डी में मनमाने ढंग से हेक्साहेड्रल कोशिकाओं में अंक छांटने के बारे में है, जबकि यह समाधान 2 डी में नियमित हेक्सागोनल कोशिकाओं या अनियमित आयामों में इंगित करता है जो किसी भी आयाम में कुछ वोरोनोई टेसलेशन के अनुरूप हैं। यह विधि केवल तभी लागू होती है जब जाली पहले स्थान पर वोरोनोई टेसेलेशन के रूप में उत्पन्न हुई थी (जो कभी-कभी उपयोग किया गया दृष्टिकोण प्रतीत होता है )।


मुझे यकीन नहीं है कि आप यहां किस तरह का मतलब रखते हैं, लेकिन मुझे लगता है कि आप विमान पर हेक्सागोनल डिब्बे में बिंदु को सॉर्ट करना चाहते हैं।

मैथेमेटिका वह है जो मैं जानता हूं, इसलिए मैं आपको यह दिखाने जा रहा हूं कि इसे मैथमेटिका में कैसे किया जाए, लेकिन विधि को अन्य प्रणालियों में पोर्ट किया जा सकता है। विचार यह है कि एक हेक्सागोनल जाली त्रिकोणीय एक का दोहरी है: इसे त्रिकोणीय व्यवस्था में एक बिंदु के वोरोनोई आरेख के रूप में उत्पन्न किया जा सकता है। क्लाउड का एक बिंदु किसी दिए गए षट्भुज का है यदि यह किसी अन्य षट्भुज के केंद्र की तुलना में उस षट्भुज के केंद्र के करीब है।

यह विधि विभिन्न आकृतियों के मेश के लिए भी काम करेगी, जब तक कि वे कुछ बिंदु व्यवस्था के वोरोनोई आरेख के रूप में उत्पन्न हो सकते हैं। (जैसे हेक्सागोन को नियमित होने की आवश्यकता नहीं है।)


चलो जाल पैदा करते हैं। यह एक त्रिकोण जाली है:

pts = Join @@ Table[{x, Sqrt[3] y}, {x, 0, 4}, {y, 0, 2}];

points = Join[pts, TranslationTransform[{1/2, Sqrt[3]/2}] /@ pts];

Needs["ComputationalGeometry`"]
PlanarGraphPlot[points, LabelPoints -> False]

गणितज्ञ ग्राफिक्स

इसकी दोहरी हेक्सागोनल हम में रुचि रखते हैं:

DiagramPlot[points, LabelPoints -> False]

गणितज्ञ ग्राफिक्स

यह एक फ़ंक्शन बनाता है nfजो हेक्सागोन केंद्र के सूचकांक को पाता है जो कुछ क्लाउड बिंदु के सबसे करीब है। यह विधि की कुंजी है:

nf = Nearest[N[points] -> Range@Length[points]];

अब चलो 1000 यादृच्छिक बिंदुओं के एक बादल को उत्पन्न करते हैं और उनके साथ छाँटते हैं nf:

cloud = RandomReal[{-1/2, 5}, {1000, 2}];

indices = First /@ nf /@ cloud;

indicesकेंद्रों के सूचकांक शामिल हैं जो प्रत्येक क्लाउड बिंदु के सबसे करीब है। यह वह जानकारी है जिसकी हमें जरूरत थी। अब हम उनमें से एक हिस्टोग्राम बना सकते हैं ...

Histogram[indices]

गणितज्ञ ग्राफिक्स

... या उनमें से प्रत्येक रंग ...

Show[
 DiagramPlot[points, LabelPoints -> False],
 Graphics@MapThread[{ColorData[3][#1], Point[#2]} &, {indices, cloud}],
 PlotRange -> All, AspectRatio -> Automatic
 ]

गणितज्ञ ग्राफिक्स

... या किसी भी प्रकार की फैंसी विज़ुअलाइज़ेशन हम चाहते हैं।

tally = Tally[indices];

ListDensityPlot[Join[points, List /@ Sort[tally][[All, 2]], 2], 
 InterpolationOrder -> 0, 
 Epilog -> (Text[#2, points[[#1]]] & @@@ tally), 
 PlotRange -> {{-.5, 5}, {-.5, 5}}, Mesh -> All, 
 ColorFunction -> (ColorData["BeachColors"][1 - #] &)]

गणितज्ञ ग्राफिक्स


यहाँ मुख्य बिंदु वह फ़ंक्शन था जो किसी चीज़ के निकटतम बिंदु को पाता है ( Nearest)। Mathematica ने इसे बनाया है, लेकिन एक मौका है कि आपका सिस्टम ऐसा नहीं करता है। यदि यह मामला है, तो कृपया इस प्रश्न को देखें कि इस तरह के फ़ंक्शन को कुशलतापूर्वक कैसे लागू किया जाए (या बस अनुभवहीन रैखिक कार्यान्वयन के साथ जाएं यदि आपके पास प्रक्रिया के लिए बहुत बड़ी मात्रा नहीं है)।


आपका बहुत बहुत धन्यवाद! मूल रूप से मुझे जो चाहिए वह एक ऐसा संबंध है जो प्रत्येक बिंदु और एक "बिन" के बीच एक संबंध दिखाता है जैसा कि आपने इसे (3 आयामी हेक्साहोअर बॉक्स) कहा था। आप जो सुझाव देते हैं वह बहुत दिलचस्प लगता है, लेकिन मैं संभावित रूप से लाखों बक्से और सैकड़ों हज़ारों बिंदुओं के साथ काम कर रहा हूं। सवाल यह है कि लागत अधिक क्या है: दोहरी जाली निर्माण या "डिब्बे" के बाउंडिंग बॉक्स के साथ काम करना और केडी का उपयोग करना खोज के लिए पेड़। मैं इस विषय पर बहुत नया हूँ, इसलिए मैं वास्तव में गलत दिशा में नहीं जाना चाहता।
टेमरिक

@ tomislav-maric मुझे खेद है कि मैंने आपके प्रश्न को गलत समझा। दुर्भाग्य से मैं भी इस विषय के लिए नए हूँ, और मैं के साथ भी परिचित नहीं था (के रूप में आप तो सवाल मैं से जुड़ा हुआ से देख सकते हैं) कुछ दिन पहले -d पेड़। इसके अलावा, मुझे यकीन नहीं है कि आपका जाल एक वोरोनोई टेसलेशन के अनुरूप हो सकता है (शायद नहीं), इसलिए मेरा तरीका यहां बेकार हो सकता है। मुझे लगता है कि यह सबसे अच्छा है अगर मैं इस उत्तर को हटा दूं क्योंकि यह भ्रामक है। k
स्ज़बोलॉक्स

इसे जरूर डिलीट करें, कोई इसे उपयोगी समझ सकता है! :) यह समस्या का समाधान होने के लिए पाउट हो सकता है, यह सिर्फ इतना है कि मैं अभी तक इसे स्वीकार नहीं कर सकता जब तक कि मैं इसके बारे में नहीं पढ़ता।
टेमरिक

और इस तरह के एक विस्तृत जवाब के लिए धन्यवाद, अगर मैं आपको अधिक अंक दे सकता था! :)
टेमरिक

@ tomislav-maric वोटों को देखते हुए, मैं चिंतित हूं कि मेरे जवाब से यह मौका कम हो जाएगा कि आपको एक उपयोगी मिल जाएगा, या गलतफहमी में योगदान देगा। मुझे लगता है कि अगर मैं हटाता हूं तो यह अधिक उत्पादक है।
१०:११ पर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.