मैं 3D लाइन पर 3D बिंदु कैसे प्रोजेक्ट कर सकता हूं?


20

मान लीजिए कि मेरे पास दो बिंदुओं Aऔर B, दोनों के रूप में परिभाषित एक रेखा है (x, y, z)। ये बिंदु 3D अंतरिक्ष में एक रेखा का प्रतिनिधित्व करते हैं।

मेरे पास एक बिंदु भी है, जो एक Pही प्रारूप में परिभाषित है, जो लाइन पर नहीं है।

मैं रेखा पर उस बिंदु के प्रक्षेपण की गणना कैसे करूंगा? मैं 2 डी में यह कैसे करना है के बारे में पता कर रहा हूँ, लेकिन 3 डी इस पर सभी संसाधनों को कमजोर करने के लिए लगता है।

जवाबों:


29

आपको बस वेक्टर APपर वेक्टर को प्रोजेक्ट करने की आवश्यकता है AB, फिर परिणामी वेक्टर को बिंदु पर जोड़ें A

यह गणना करने का एक तरीका है:

A + dot(AP,AB) / dot(AB,AB) * AB

यह सूत्र 2 डी और 3 डी में काम करेगा। वास्तव में यह सभी आयामों में काम करता है।


धन्यवाद श्री सैम - आपने उपरोक्त फॉर्मूला कैसे निकाला?
BKSpurgeon

2
मैंने इसे प्राप्त नहीं किया, यह एक प्रसिद्ध सूत्र है जिसे आप कई हैंडबुक में पा सकते हैं।
सैम होसेवर

क्या C ++ जैसी प्रोग्रामिंग भाषा में इसे लिखने का कोई नमूना है?
रोचा

1
@ViniciusdeMeloRocha डॉट a.x*b.x+a.y*b.y+a.z*b.z ...सब कुछ वैसा ही होगा जैसा कि वैक्टरों के बीच समन्वय के अनुसार सीधा है।
Ocelot

4

यह अजगर में करने का एक तेज़ और आसान तरीका है:

from numpy import *
def ClosestPointOnLine(a, b, p):
    ap = p-a
    ab = b-a
    result = a + dot(ap,ab)/dot(ab,ab) * ab
    return result

फ़्लोट्स का उपयोग करें; यदि आपके वैक्टर में पूर्णांक होते हैं तो विभाजन एक पूर्णांक विभाजन होगा, और परिणाम गलत होंगे।


1
/dot(ab,ab)बेमानी है
वाल्डो ब्रोंचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.