मैं एक लाइन खंड के सामान्य वेक्टर की गणना कैसे करूं?


177

मान लीजिए मेरे पास एक लाइन खंड है (X1, y1) से (x2, y2)। मैं सामान्य वेक्टर लंब रेखा की गणना कैसे करूं?

मैं 3 डी में विमानों के लिए ऐसा करने के बारे में बहुत सारी चीजें पा सकता हूं, लेकिन कोई 2 डी सामान नहीं।

कृपया गणित पर आसानी से जाएं (काम किए गए उदाहरणों के लिंक, आरेख या एल्गोरिदम का स्वागत है), मैं एक गणितज्ञ से अधिक एक प्रोग्रामर हूं;)


2
और यदि आप इसके पीछे "गणित" पर जानना चाहते हैं, तो आप stackoverflow.com/a/7470098/189767 पर मेरा जवाब देख सकते हैं । यह मूल रूप से एक ही है, लेकिन अधिक विस्तृत है।
एंड्रियास

2
यह सवाल गणित का है, प्रोग्रामिंग का नहीं।
चार्ली

1
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह गणित के बारे में है, प्रोग्रामिंग नहीं।
पैंग

जवाबों:


237

यदि हम dx = x2-X1 और dy = y2-y1 को परिभाषित करते हैं, तो मानदंड (-dy, dx) और (डाई, -dx) हैं।

ध्यान दें कि किसी भी विभाजन की आवश्यकता नहीं है, और इसलिए आप शून्य से विभाजन को जोखिम में नहीं डाल रहे हैं।


14
यह काफी सूक्ष्म है और मुझे normal.x = -dy और normal.y = dx का एहसास करने में थोड़ा समय लगा। मेरे पास उनके पास दूसरा रास्ता था क्योंकि यह एक टाइपो की तरह लग रहा था जो x को y मान प्रदान कर रहा था ...
पिकू

@OrenTrutner मुझे अभी भी यह समझ नहीं आया है; (x', y') = (-y, x)और (x', y') = (y, -x)सही प्रतीत होता है, लेकिन कोई यहां dxऔर dyयहां क्यों उपयोग करेगा । इसके अलावा, ढलान के आधार पर, m1 * m2 = -1समकोण रेखाओं के लिए, इसलिए dy' = dx' * (-dx/dy)और dx' = dy' * (-dy/dx)आपके समीकरण में कैसे आए normal.x = x' = -dy?
लीजेंड्स 2

1
क्या आप इस बारे में अधिक जानकारी दे सकते हैं कि डेल्टा यहाँ कैसे भूमिका निभाता है? मुझे यकीन है कि मैं यहाँ कुछ याद कर रहा हूँ।
लीजेंड्स 2

7
@ किंवदंतियां 2k: डेल्टा स्पर्शरेखा वेक्टर है। सामान्य स्पर्शरेखा के लिए लंबवत दिशा है। यदि आप 90 डिग्री रोटेशन के लिए 2 डी मैट्रिक्स को देखते हैं, तो x / y मानों को
छोड़ना

@ सर्जन: आह! समझ गया, मैं ढलान के साथ डेल्टा को भ्रमित कर रहा था, जबकि
एफाइन ज्योमेट्री में

95

इसके बारे में सोचने का एक और तरीका यह है कि किसी दिए गए दिशा के लिए इकाई वेक्टर की गणना करें और फिर सामान्य वेक्टर प्राप्त करने के लिए 90 डिग्री वामावर्त घुमाव लागू करें।

सामान्य 2 डी परिवर्तन का मैट्रिक्स प्रतिनिधित्व इस तरह दिखता है:

x' = x cos(t) - y sin(t)
y' = x sin(t) + y cos(t)

जहाँ (x, y) मूल वेक्टर के घटक हैं और (x ', y') रूपांतरित घटक हैं।

यदि t = 90 डिग्री है, तो cos (90) = 0 और sin (90) = 1. इसे प्रतिस्थापित और गुणा करना:

x' = -y
y' = +x

समान परिणाम जैसा कि पहले दिया गया था, लेकिन यह कहां से आता है, इसके बारे में थोड़ा और स्पष्टीकरण के साथ।


2
एक टन का धन्यवाद, मेरे सिर को तोड़ रहा था कि यह कैसे हो रहा था।
लीजेंड्स 2

1
हालाँकि मुझे रोटेशन का फॉर्मूला पहले से पता था, इस जवाब से, मेरे सिर के अंदर क्लिक करने वाली बात यह थी कि कोण एक स्थिर (+/- 90) है, जो इसे एक साधारण नकार और x और y के उलट करने के लिए सरल करता है।
लीजेंड्स 2

@duffymo परिणाम की लंबाई एक है?
मार्टिन मेसर

यदि वेक्टर को परिवर्तन से पहले सामान्यीकृत किया जाता है तो यह उसके बाद भी रहेगा। घूर्णी परिवर्तन करने से पहले या बाद में आपको सामान्य करना होगा।
duffymo

11

यह प्रश्न बहुत समय पहले पोस्ट किया गया था, लेकिन मुझे इसका जवाब देने का एक वैकल्पिक तरीका मिला। इसलिए मैंने इसे यहां साझा करने का फैसला किया।
सबसे पहले, एक को पता होना चाहिए कि: यदि दो वैक्टर लंबवत हैं, तो उनका डॉट उत्पाद शून्य के बराबर है।
सामान्य वेक्टर (x',y')लाइन को जोड़ने वाली (x1,y1)और लंबवत है (x2,y2)। इस रेखा की दिशा है (x2-x1,y2-y1), या (dx,dy)
इसलिए,

(x',y').(dx,dy) = 0
x'.dx + y'.dy = 0

जोड़े (x ', y') के बहुत सारे हैं जो उपरोक्त समीकरण को पूरा करते हैं। लेकिन सबसे अच्छी जोड़ी जो हमेशा संतुष्ट होती है (dy,-dx)या(-dy,dx)


7
m1 = (y2 - y1) / (x2 - x1)

यदि लंबवत दो रेखाएँ:

m1*m2 = -1

फिर

m2 = -1 / m1 //if (m1 == 0, then your line should have an equation like x = b)

y = m2*x + b //b is offset of new perpendicular line.. 

यदि आप इसे परिभाषित बिंदु से पास करना चाहते हैं तो b कुछ चीज है

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