इस दिलचस्प समस्या से निपटने का एक तरीका यह है कि इसे एक द्विभाजन बिंदु वितरण के केंद्र का एक मजबूत अनुमानक के रूप में देखा जाए। ए (अच्छी तरह से ज्ञात) समाधान उत्तल खुरों को छीलने के लिए है जब तक कि कुछ भी नहीं बचा है । अंतिम गैर-रिक्त पतवार का केंद्र केंद्र का पता लगाता है।
(यह बैगप्लॉट से संबंधित है । अधिक जानकारी के लिए, वेब को "उत्तल पतवार छीलने वाले मल्टीवेट आउटलाइयर के लिए खोजें"।)
16 सचित्र बिंदुओं के लिए परिणाम को इस नक्शे में केंद्रीय त्रिकोण के रूप में दिखाया गया है। आसपास के तीन बहुभुज क्रमिक उत्तल पतवार दिखाते हैं। पहले दो चरणों में पाँच आउटिंग पॉइंट (कुल का 30%!) हटा दिए गए थे।
में उदाहरण की गणना की गई थी R
। एल्गोरिथ्म को मध्य ब्लॉक में लागू किया जाता है, "उत्तल छीलने।" यह बिल्ट-इन chull
रूटीन का उपयोग करता है, जो पतवार के बिंदुओं की अनुक्रमणिका लौटाता है। इन बिंदुओं को नकारात्मक अनुक्रमण अभिव्यक्ति के माध्यम से हटा दिया जाता है xy[-hull, ]
। यह तब तक दोहराया जाता है जब तक कि अंतिम बिंदु हटा नहीं दिए जाएंगे। अंतिम चरण में, निर्देशांक के औसत से सेंट्रो की गणना की जाती है।
ध्यान दें कि कई मामलों में डेटा को प्रोजेक्ट करना भी आवश्यक नहीं है: उत्तल पतवार तब तक नहीं बदलेगी जब तक कि मूल विशेषताएं एंटीमैरिडियन (+/- 180 डिग्री देशांतर) पर नहीं होती हैं, या तो पोल, या इतने व्यापक होते हैं कि उनके बीच खंडों की वक्रता हो जाएगी कुछ अलग करो। (तब भी वक्रता थोड़ी चिंता का विषय होगी, क्योंकि छीलने अभी भी एक केंद्रीय बिंदु में परिवर्तित हो जाएगा।)
#
# Project the data.
#
dy <- c(8,7,5,10,7,17,19,19,21,22,22,22,24,24,26,26)
dx <- c(66,67,66,89,89,79,78,76,75,81,78,77,75,80,77,83)
lat <- (28.702 + dy/1e5) / 180 * pi
lon <- (77.103 + dx/1e5) / 180 * pi
y <- dy
x <- cos(mean(lat)) * dx
#
# Convex peeling.
#
xy <- cbind(x, y)
while(TRUE) {
hull <- chull(xy)
if (length(hull) < nrow(xy)) {
xy <- xy[-hull, ]
} else {
xy.0 <- matrix(apply(xy, 2, mean), 1, 2)
break
}
}
#
# Plot the data `xy` and the solution `xy.0`.
#
plot(range(x), range(y), type="n", asp=1)
points(x, y, pch=21, bg="#a01010")
points(xy.0, pch=24, cex=1.2, bg="#404080")