2011-08-22 22 views
5

संभव डुप्लिकेट:
How can I tell if a point is nearby a certain line?प्वाइंट, वाई

//Returns the point on the line traced from start to end which 
//comes nearest to 500,000, 500,000. The points are scaled between 
//1,000,000 and 0 from their original fp types. 
Point closestToCentre(Point start, Point end); 

किसी पिक्सल के माध्यम से एकल स्टेपिंग की तुलना में तेज तरीका पता है?

क्या मेरे से कुछ और चेतावनी मेरे गणित को प्रदर्शित कर सकती है & ज्यामिति शक्ति कृपया?

_______EDIT___________

धन्यवाद क्रिस, यह मेरे भ्रामक था:

[x; -एक/bx-ग/b] = [0; -c/ख] -1/बी [बी; एक] एक्स।

अब मुझे लगता है कि यह सिर्फ दो भागों में विभाजित है (मुख्य रूप से वाई घटक) जो एक ही परिणाम उत्पन्न करने के लिए गठबंधन करता है। तो एक मिनट :)

_______EDIT_________

जेसन मूर, प्रेरणा के लिए धन्यवाद, यहाँ मैं क्या कर रहा हूँ, रेखांकन है,

64x64 square with 2 sample lines each passing edge to edge and missing the centre by some distance

मैं के लिए वर्ष आंशिक अंशों मस्तिष्क कोशिका बड़े उत्साहित थे उम्मीद है कि स्पष्ट है।

____EDIT________

तो मैं यथोचित मेरी नमूना लाइन से समकोण पर एक लाइन लेने के लिए और केंद्र से इसे चलाने लेकिन कैसे जब वे स्पर्श बताने के लिए करने की उम्मीद कर सकता है?

enter image description here

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

____EDIT_________

चाहे अच्छा या बुरा बात है, मैं नहीं जानता कि, लेकिन एक खोज इंजन के रूप stackoverflow की सुंदरता जांच के कई मार्गों मेरे लिए पता चला है। मुख्य रूप से मुझे यहां पहला समाधान पसंद है: Shortest distance between a point and a line segment

लेकिन मेरे आत्म मैं तल पर मेटी के समाधान से लिंक की जरूरत है (लेकिन एक) को यह साबित करने के लिए:

http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static

व्युत्पत्ति इतना सरल और सुरुचिपूर्ण भी मैं इसे का पालन कर सकता है!

को देखते हुए http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html

+0

मुझे लगता है कि सर्वव्यापी त्वरित क्रम जल्द ही यहां टैप करने जा रहा है। नहीं! वे पहले से ही क्रमबद्ध हैं !! तो करीब, अभी तक .. – John

+0

यह एक त्रिकोणमिति प्रश्न है। इसे http://math.stackexchange.com/ पर पूछने का प्रयास करें। – Enigmativity

+0

डुप्लिकेट नहीं है। वैसे यह उन लोगों के लिए है जिन्होंने एक ही चीज़ से पूछा। लेकिन किसी दिए गए बिंदु के निकटतम रेखा पर बिंदु ढूंढना एक बिंदु है जो किसी बिंदु के नजदीक है या नहीं। आप इसका उत्तर खोजने के लिए इसका उत्तर उपयोग कर सकते हैं, लेकिन विशेष रूप से उस प्रश्न का चयनित समाधान इस का उत्तर नहीं देता है। – Tatarize

उत्तर

7

यह एक लाइन है, जो कुछ ठीक वेक्टर जिमनास्टिक के साथ किया जा सकता है, के रूप में MathWorld पर सविस्तार पर एक बिंदु के रैखिक प्रक्षेपण की बात है।

लेख विवरण बताता है कि बिंदु से एक रेखा तक सबसे छोटी दूरी कैसे प्राप्त करें, और मध्यवर्ती चरणों में से एक बिंदु x, y से मूल रेखा तक लंबवत रेखा ढूंढ रहा है। इन दो पंक्तियों को छेड़छाड़ करने से आप बिंदु पर, लाइन पर, एक्स के निकटतम, y।

टिप्पणी के जवाब में संपादित करें: लिंक में कौन सा समीकरण (2) है वेक्टर को y = mx + c की याद ताजा करने के रूप में बदल रहा है, जिससे आप ढाल को जल्दी और आसानी से पढ़ सकते हैं, जिससे लंबवत ढाल आसानी से गणना की जा सकती है।

+0

यह एक अच्छा लिंक दिखता है। मेरा पुनरावृत्ति सोल एक एफपीपीओटी कक्षा और कई स्थानीय युद्धों में भाग गया। अब मैं उलझन में हूं: [x; -एक/bx-ग/b] = [0; -c/ख] -1/बी [बी; एक] एक्स। आपकी पोस्ट को संपादित करने की देखभाल, मुझे नहीं लगता कि मैंने बस वैक्टर को कवर किया है, इसलिए यहां धीमा हो रहा है। धन्यवाद। – John

+0

आह, हाँ वाई = एमएक्स + सी, मैंने पहले सुना है। लेकिन मुझे लगता है कि आप पाएंगे कि यह (eq.1) का लक्ष्य है। यह कहने वाला था कि मैं आप से 1 कदम आगे था, लेकिन अब मैं eq.3 पर फंस गया हूं :) – John

+0

आपके लिंक में वेक्टर के ऊपर umlat^संकेत करता है कि यह एक इकाई वेक्टर है? मुझे लगता है कि यूके गणित की किताबें एक फ्लैट टोपी का उपयोग करती हैं .. – John

1

मुझे लगता है कि सबसे तेज तरीका प्रक्रिया दो चरणों में होगा:

  1. मान लें आपके लाइन की लंबाई में अनंत है, और (500000, 500000) के माध्यम से अपनी लाइन और उसके सीधा द्विभाजक के चौराहे पाते हैं।
  2. सुनिश्चित करें कि यह बिंदु वास्तव में आपकी रेखा पर है, अन्यथा निकटतम अंतराल ढूंढें।

क्रिस की पोस्ट चरण 1 को अच्छी तरह से कवर करती है, आपको बस चरण 2 के लिए चेक जोड़ना है क्योंकि आपके पास लाइन सेगमेंट है और आप सुनहरे हैं।

बिंदु 1 = (x1, y1) और एंडपॉइंट 2 = (x2, y2) दें। (- y1 y2)/(x2 - x 1) * (x - x 1) + y1

और perp तो इन दो बिंदुओं युक्त लाइन

y = है। द्विभाजक के माध्यम से (5e5, 5e5)

y = है (x1 - x2)/(y1 - y2) * (एक्स - 5e5) + 5e5

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

+0

अच्छा बिंदु, उस पर विचार नहीं किया! – Kris

+0

क्षमा करें, इस पोस्ट की शब्दावली ने मुझे अपने वीसी आईडीई और एक पुनरावृत्त सोल में बदल दिया। आपका बिंदु "2. सुनिश्चित करें कि वह बिंदु वास्तव में आपकी रेखा पर है, अन्यथा निकटतम अंतराल ढूंढें।" क्रिस के लिंक को पढ़ने के बावजूद ऐसा लगता है कि आप मुझे मेरी लाइन पर अपना बिंदु ढूंढने की उम्मीद कर रहे थे, जो सबसे असंभव है। – John

+0

क्षमा करें अगर मैं अस्पष्ट था। चरण 2 बस तीन उम्मीदवार बिंदुओं से निकटतम बिंदु का चयन कर रहा है: चरण 1, या दोनों अंतिम बिंदुओं में पाया गया बिंदु। वास्तव में वहां कोई जटिल गणित शामिल नहीं है। यदि निम्न शर्त सत्य साबित होती है: 'x अधिकतम (पी 1.एक्स, पी 2.एक्स) || वाई> अधिकतम (p1.y, p2.y) ', आपको सही निकटतम बिंदु के लिए अपने दो अंत बिंदुओं के बीच चयन करना होगा। – Sean

0

इस स्टैक ओवरफ़्लो question पर मेरा उत्तर देखें। यह प्रश्न आपकी तुलना में अधिक जटिल है, इसलिए आपको अपनी जरूरतों को प्राप्त करने के लिए मेरे उत्तर में पहले कुछ कदमों का उपयोग करने में सक्षम होना चाहिए।

+0

मुझे पसंद है http://stackoverflow.com/questions/3120357/get-closest-point-to-a-line – John

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