7

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

नीचे जिस दृष्टिकोण का उपयोग कर रहा हूं वह नीचे है। मैं पहली बार यह सुनिश्चित कर रहा हूँ कि एक < बी और सी < डी

if(pa < pc){ 
    if(pc < pb){ 
    if(pd < pb){ 
     // overlap exists; CD falls entirely within AB 
    } 
    else { 
     // overlap exists; CB is the overlapping segment 
    } 
    } 
    else { 
    // no overlap exists; AB lies before CD 
    } 
} 
else { 
    if(pa < pd){ 
    if(pb < pd){ 
     // overlap exists; AB lies entirely within CD 
    } 
    else { 
     // overlap exists; AD is the overlapping segment 
    } 
    } 
    else { 
    // no overlap exists; CD lies before AB 
    } 
} 

अब, वहाँ यह करने के लिए एक सरल समाधान नहीं है?

अद्यतन: एक और तरीका है ... बाहरी हिस्सों के बीच की दूरी के साथ दोनों सेगमेंट की लंबाई की तुलना की तुलना करें। यदि उत्तरार्द्ध कम है, ओवरलैप मौजूद है।

उत्तर

13

सुनिश्चित करें एक है < बी, सी < डी:

if (pb - pc >= 0 and pd - pa >=0) { // overlap 
    OverlapInterval = [ max(pa, pc), min(pb, pd) ] // it could be a point [x, x] 
} // else: not overlap 
+0

शानदार! एसओ में आपका स्वागत है !! –

+0

धन्यवाद। मजा आता है। – Edoot

2

A<B, C<D, और A<=C सुनिश्चित करें (जो आप सरल स्वैपिंग द्वारा कर सकते हैं) सुनिश्चित करें। तब:

  • अगर B<C, खंडों
  • अगर B=C संबंध तोड़ना है, तो चौराहे एकल बिंदु B=C
  • अगर B>C है, तो चौराहे खंड [C, min(B, D)]
+2

आपका क्या मतलब है <बी? एएक्स और बीएक्स के माध्यम से? बराबर एक्स के लिए आप इसे कैसे सुनिश्चित कर सकते हैं? – AlexWien

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