2010-04-20 30 views
5

पर औसत दूरी की गणना करें मैं 3 डी में एक बिंदु और रेखा खंड के बीच औसत दूरी की गणना करने के लिए एक एल्गोरिदम खोज रहा हूं। इसलिए दो बिंदु ए (x1, y1, z1) और बी (x2, y2, z2) दिया गया है जो लाइन सेगमेंट एबी का प्रतिनिधित्व करते हैं, और तीसरा बिंदु सी (x3, y3, z3), एबी पर प्रत्येक बिंदु के बीच औसत दूरी क्या है सी को इंगित करने के लिए?बिंदु से रेखा खंड और लाइन सेगमेंट तक लाइन सेगमेंट

मुझे दो लाइन खंडों के बीच औसत दूरी में भी रूचि है। इसलिए सेगमेंट एबी और सीडी दिया गया है, एबी पर प्रत्येक बिंदु से सीडी पर निकटतम बिंदु से औसत दूरी क्या है?

मुझे वेब खोजों के साथ कोई भाग्य नहीं मिला है, इसलिए किसी भी सुझाव की सराहना की जाएगी।

धन्यवाद।

+1

कोई भी कारण आप इसकी गणना करने की कोशिश कर रहे हैं? यह एक असामान्य गणना प्रतीत होता है, और मुझे डर है कि यह बहुत आसान नहीं है। क्या आप वाकई यही खोज रहे हैं? – brainjam

उत्तर

1

तुम्हारा मतलब है कि मैं क्या लगता है कि आप द्वारा "औसत" (और "दूरी," यानी एल 2 आदर्श dreeves ने उल्लेख किया) मतलब हैं, तो यहाँ एक प्रक्रिया मुझे लगता है कि कि एक बिंदु और बीच की औसत दूरी को खोजने के लिए काम करना चाहिए है एक रेखा खंड। आपको एक फ़ंक्शन dot(A,B) की आवश्यकता होगी जो दो वैक्टरों का डॉट उत्पाद लेता है।

// given vectors (points) A, B, C 
K1 = dot(A-C,A-C) 
K2 = 2*dot(B-A,A-C) 
K3 = dot(B-A,B-A) 
L1 = sqrt(K3*(K1+K2+K3)) 
L2 = sqrt(K3*K1) 
N = 4*K3*L1 + 2*K2*(L1-L2) + (K2*K2-4*K1*K3)*log((K2+2*L2)/(2*K3+K2+2*L1)) 
D = N/(8*K3^1.5) 

मान लिया जाये कि मैं सब कुछ सही ढंग से लिखित दिया है, D तो औसत दूरी हो जाएगा।

यह मूल रूप से सिर्फ एक छद्म कोड है जो मैथमैटिका में किए गए अभिन्न अंग के परिणाम का मूल्यांकन करने के लिए है। इसके लिए कुछ साफ कम्प्यूटेशनल शॉर्टकट हो सकता है लेकिन यदि वहां है, तो मुझे यह नहीं पता। (और जब तक कोई नहीं होता, तो मैं सवाल करता हूं कि आपको वास्तव में इस गणना को कितना करने की आवश्यकता है)

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

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

+0

मैं प्रभावित हूं, डेविड! प्रतीकात्मक ए, बी, सी के साथ अभिन्न का मूल्यांकन करने के लिए आपको गणित कैसे मिला? दुर्भाग्यवश, हम में से एक ने एक त्रुटि की है क्योंकि जब मैं विशिष्ट ए, बी, सी के लिए [सामान्य [(1-के) ए + केबी-सी], {के, 0,1}] को एकीकृत करने के लिए अपने एल्गोरिदम की तुलना करता हूं, तो वे ' टी मैच कोई विचार? – dreeves

+0

पीएस: अब मुझे यकीन है कि डेविड के एल्गोरिदम में एक त्रुटि है, लेकिन मुझे पता नहीं चला कि त्रुटि क्या है यह निर्धारित करने के लिए उसने क्या किया है! – dreeves

+0

यहां मैंने जो किया है: लाइन सेगमेंट को 'ए + के (बीए)' के रूप में parametrized किया जा सकता है, इसलिए मैंने मैन्युअल रूप से मूल्यांकन किया '(ए + के (बीए) -सी)^2', '(एसी)^2 + 2k (BA)। (एसी) + K^2 (BA)^2'। मैंने 'के 1 = (एसी)^2', 'के 2 = 2 (बीए)। (एसी)', और 'के 3 = (बीए)^2' सेट किया और गणित से' एकीकृत [एसक्यूआरटी [के 1 + के 2 के + के 3] कश्मीर^2], {कश्मीर, 0,1}] '। –

2

सबसे पहले, दो बिंदुओं के बीच की दूरी समन्वय के जोड़ों के अंतर के वर्गों के योग की वर्ग जड़ है। (उदाहरण के लिए, (0,0,0) से (1,1,1) की दूरी sqrt (3) है लेकिन यह किसी भी आयाम में मनमानी बिंदुओं के लिए काम करती है।) यह दूरी l2-norm (लोअर केस एल) या यूक्लिडियन मानक। लिखें आदर्श (ए, बी) औसत दूरी की दिलचस्प समस्या के लिए पर अंक ए और बी

के बीच की दूरी के लिए ... (ध्यान दें कि एक लाइन के लिए या के बीच एक बिंदु से न्यूनतम दूरी खोजने लाइन सेगमेंट एक और अधिक आम समस्या है। उस समस्या के लिए अच्छे पॉइंटर्स के साथ यहां एक जवाब था, लेकिन ऐसा लगता है कि यह उस समय हटा दिया गया था।)

एक बिंदु सी से एक रेखा खंड एबी तक औसत दूरी खोजने के लिए, ए और बी, अर्थात् (1-के) ए + केबी के बीच एक मनमाना बिंदु की दूरी पर विचार करें जहां के 0 से 1. तक मानक है (सी, (1-के) ए + केबी)। तो औसत दूरी मानदंड (सी, (1-के) ए + केबी के के = 0 से 1 तक अभिन्न है)।

avgd[A_,B_,C_] := Integrate[[email protected][(1-k)*A+k*B-C, (1-k)*A+k*B-C], {k, 0, 1}] 

integrand भी Norm[(1-k)*A+k*B-C] लिखा जा सकता है:

मेथेमेटिका किसी भी विशिष्ट ए, बी, और सी

के लिए कि अभिन्न कर सकते हैं यहाँ एक मेथेमेटिका कार्यान्वयन है। किसी भी तरह से, गणित विशिष्ट बिंदुओं के लिए ऐसा कर सकता है लेकिन इसे प्रतीकात्मक रूप से एकीकृत नहीं कर सकता है, हालांकि जाहिर है कि डेविड इसे ऐसा करने के लिए मिला है। यहाँ टिप्पणी से डेविड का उदाहरण है:

> avgd[{0, 0, 0}, {4, 0, 0}, {4, 3, 0}] // N 

3.73594 

दो रेखा खंडों बीच की औसत दूरी की समस्या के लिए, सिद्धांत रूप में मुझे लगता है कि यह काम करना चाहिए:

avgd[A_,B_,C_,D_] := Integrate[Norm[(1-k)A+k*B - (1-j)C - j*D], {k,0,1}, {j,0,1}] 

लेकिन मेथेमेटिका कि यहां तक ​​कि पर गला घोंटना करने लगता है विशिष्ट बिंदुओं के लिए, प्रतीकात्मक रूप से अकेले रहने दें।

+1

दिलचस्प तरीका, क्या आप मुझे स्पष्टीकरण/प्रमाण के लिए इंगित कर सकते हैं? (मैं सिर्फ उत्सुक हूं) –

+0

... और अब जब मैं इसके बारे में सोचता हूं, तो मुझे विश्वास है कि उस सूत्र के साथ कुछ गलत है। 'ए = (0,0,0)', 'बी = (4,0,0)', और या तो 'सी = (3.99 99 99 99,3,0)' या 'सी = (4.000000001,3,0) 'पर विचार करें । पूर्व मामले में, आपका पहला फॉर्मूला (जब डी एबी पर स्थित होता है) 3.5 की औसत दूरी पैदा करता है, लेकिन दूसरे मामले में आपका दूसरा फॉर्मूला दूरी 4 उत्पन्न करता है, इस तथ्य के बावजूद कि दोनों लगभग समान होना चाहिए। (मेरी खुद की विश्लेषणात्मक गणना 3.735 9 देती है) –

+0

बकवास, मैंने एक सबूत स्केच करना शुरू कर दिया और पाया कि मैं गलत था! अद्यतन के लिए खड़े हो जाओ ... – dreeves

1

ठीक है, अगर विश्लेषण विफल रहता है, एक कंप्यूटर के लिए पहुंच सकते हैं और जब तक आप संख्या का एहसास दिलाने में गणना का एक मूर्खतापूर्ण राशि कर ...

मैं भी मेथेमेटिका की एक प्रति है। चीजों को सरल रखने के लिए, चूंकि एक त्रिभुज को विमान में झूठ बोलना चाहिए, मैंने निम्नलिखित 2 डी स्पेस में काम किया है। चीजों को अतिरिक्त सरल रखने के लिए, मैं {0,0} पर एक बिंदु निर्दिष्ट करता हूं और {1,0} से {0,1} पर एक पंक्ति खंड निर्दिष्ट करता हूं। बिंदु से रेखा तक औसत दूरी होना चाहिए, यदि यह सार्थक है, तो सभी पंक्तियों की औसत लंबाई जिसे लाइन सेगमेंट पर कहीं भी {0.0} से खींचा जा सकता है। बेशक, इस तरह के लाइनों की एक बहुत भयंकर 10 मेथेमेटिका में इस रूप में

Mean[Table[EuclideanDistance[{0, 0}, {1 - k, 0 + k}], {k, 0, 1, 10.0^-1}]]] 

जो 0.830255 देता गणना की जा सकती हैं, तो चलो साथ, कहते हैं शुरू करते हैं,। अगला कदम स्पष्ट है, मैं लाइनों की संख्या को बड़ा मापता हूं। वास्तव में, चलिए औसत की एक तालिका बनाते हैं क्योंकि 10.0 के एक्सपोनेंट छोटे हो जाते हैं (वे नकारात्मक हैं!)। मेथेमेटिका में:

Table[Mean[Table[EuclideanDistance[{0, 0}, {1 - k, 0 + k}], {k, 0, 1, 
10.0^-i}]], {i, 0, 6}] 

पैदा करता है जो:

Table[Mean[Table[EuclideanDistance[{0, 0}, {4, 0 + 3 k}], {k, 0, 1, 
10.0^-i}]], {i, 0, 6}] 

जो देता है::

{1, 0.830255, 0.813494, 0.811801, 0.811631, 0.811615, 0.811613} 

इस दृष्टिकोण मैं फिर से काम किया @ डेव उदाहरण (तीसरे आयाम भूल) के बाद

{9/2, 4.36354, 4.34991, 4.34854, 4.34841, 4.34839, 4.34839} 

यह एजी नहीं है @ डेव्स कहते हैं @ डेव के एल्गोरिदम गणना के साथ ree।

संपादित करें: ठीक है, इसलिए मैंने इस पर कुछ और समय बर्बाद कर दिया है। सरल उदाहरण मैं पहली जगह में इस्तेमाल किया के लिए, कि {0,0} पर एक बिंदु के साथ है और एक रेखा खंड {0,1} से {1,0} करने के लिए प्रदान मैं Mathematica में एक समारोह को परिभाषित (हमेशा की तरह), इस तरह: अब

fun2[k_] := EuclideanDistance[{0, 0}, {0 + k, 1 - k}] 

, यह एकीकृत है।मेथेमेटिका देता है:

In[13]:= Integrate[fun2[k], {k, 0, 1}] 

    Out[13]= 1/4 (2 + Sqrt[2] ArcSinh[1]) 

या, यदि आप बल्कि संख्या होगा, इस:

In[14]:= NIntegrate[fun2[k], {k, 0, 1}] 
Out[14]= 0.811613 

है जो विशुद्ध रूप से संख्यात्मक दृष्टिकोण मैंने पहले ले लिया देता है।

अब मैं काम पर वापस जा रहा हूं, और इसे एक बिंदु से परिभाषित एक मनमाना त्रिकोण के लिए इसे सामान्य करने के लिए छोड़ देता हूं और रेखा खंड के अंत बिंदुओं को परिभाषित करता हूं।

+0

अंतिम उदाहरण के लिए, मुझे लगता है कि हम अलग-अलग दूरी की गणना कर रहे हैं। मेरी टिप्पणियों में मैं लंबाई 4 और उसके विरोधी कशेरुक के बीच की औसत दूरी के बारे में बात कर रहा था, लेकिन ऐसा लगता है कि आपने लंबाई 3 और उसके विरोधी चरम सीमा के बीच औसत दूरी की गणना की है। शायद यह बताता है कि संख्याएं क्यों मेल नहीं खाती हैं। –

+0

@ डेविड - हाँ, जब मैं अपनी गणनाओं को फिर से काम करता हूं तो मुझे 3.735 9 4 भी मिलता है। –

संबंधित मुद्दे