पॉलीगोन के सेंटीमीटर की गणना वास्तव में कैसे की जाती है?


10

मैं जानना चाहता हूं कि वास्तव में QGIS ज्यामिति उपकरण -> बहुभुज केन्द्रक बिंदु निर्देशांक की गणना कैसे कर रहे हैं। उदाहरण के लिए, यह बहुभुज के बोर्डर को छोटे-छोटे बिंदुओं में विभाजित करता है, दो जोड़ी दो अंक (लंबाई और चौड़ाई) को अधिकतम दूरी के साथ ले जाता है और इन दो रेखाओं के क्रॉसिंग को केंद्रक के रूप में ले जाता है?

जवाबों:


13

यदि QGIS GEOS के साथ केन्द्रक की गणना कर रहा है जो एक JTS ​​पोर्ट है तो एल्गोरिथ्म यह है http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidAA.html । सिद्धांत के बारे में javadoc में एक लिंक है http://www.faqs.org/faqs/graphics/algorithms-faq/ , अनुभाग 2.02 देखें: बहुभुज का केंद्रक कैसे संकलित किया जा सकता है ?।

बहुभुज के केन्द्रक (उर्फ द्रव्यमान, या गुरुत्वाकर्षण का केंद्र) की गणना बहुभुज के विभाजन के केन्द्रक के भारित योग के रूप में त्रिकोण में की जा सकती है। एक त्रिभुज का केन्द्रक केवल इसके तीन शीर्षों का औसत है, अर्थात, इसमें निर्देशांक (X1 + x2 + x3) / 3 और (y1 + y2 + y3) / 3 है। यह पहले बहुभुज को त्रिभुजित करने का सुझाव देता है, फिर प्रत्येक त्रिभुज के केंद्र द्वारा भारित प्रत्येक त्रिभुज के सेंट्रोइड्स का योग बनाते हुए, कुल बहुभुज क्षेत्र द्वारा पूरी राशि को सामान्य किया जाता है। यह वास्तव में काम करता है, लेकिन एक सरल तरीका है: त्रिकोणासन को विभाजन की आवश्यकता नहीं है, बल्कि सकारात्मक और नकारात्मक रूप से उन्मुख त्रिकोण (सकारात्मक और नकारात्मक क्षेत्रों के साथ) का उपयोग कर सकते हैं, जैसा कि बहुभुज के क्षेत्र की गणना करते समय किया जाता है। यह उनके हस्ताक्षरित क्षेत्र के साथ भारित त्रिकोण केन्द्रक की राशि के आधार पर, केन्द्रक की गणना के लिए एक बहुत ही सरल एल्गोरिथ्म की ओर जाता है। त्रिकोणों को किसी भी निश्चित बिंदु द्वारा गठित किया जा सकता है, उदाहरण के लिए, बहुभुज के शीर्ष v0, और बहुभुज के लगातार किनारों के दो अंत बिंदु: (v1, v2), (v2, v3), आदि। त्रिभुज a, b, c के साथ एक त्रिकोण इस अभिव्यक्ति का आधा है: (b [X] - एक [X]) * (c [Y] - एक [Y]) - (c [X] - a [X] ) * (बी [वाई] - एक [वाई]);

Code available at ftp://cs.smith.edu/pub/code/centroid.c (3K).
Reference: [Gems IV] pp.3-6; also includes code.

यह मुझे लगता है कि विधि सटीक है। यदि आप यह जांचना चाहते हैं कि समन्वय मूल्यों का उपयोग कैसे किया जाता है और यदि राउंडिंग त्रुटियां आदि हो सकती हैं, तो आप JTS या GEOS के स्रोत कोड पर एक नज़र डाल सकते हैं।


1
बस कुछ और लिंक: gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid यह नोट करता है कि GDAL GEOS विधि का उपयोग करता है, जिसे geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html पर दिखाया गया है । QGIS पृष्ठभूमि में GDAL कार्यक्षमता का उपयोग करता है।
आंद्रेजे

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