2011-01-28 11 views
9

मैं यह जांचना चाहता हूं कि कोई रेखा (या रेखा का कोई भी बिंदु) एक आयत के भीतर है या आयत को छेड़छाड़ करता है या नहीं।यह जांचने के लिए कि क्या कोई रेखा का कोई बिंदु (या भाग) अंदर है या आयत को छूता है

मेरे पास एक लाइन के प्रारंभ और समापन बिंदु के रूप में (x0, y0) और (x1, y1) है। इसके अलावा, (कुल्हाड़ी, ay) और (bx, द्वारा) एक आयत

उदाहरण के लिए के ऊपरी-बाएं और निचले दाएं अंक के रूप में,

 ____________ 
    |   | 
---|-----  | Result: true 
    |   | 
    |____________| 

    /
    _/__________ 
|/   | 
/   |  Result: true 
/|   | 
|____________| 


    ____________ 
    |   | 
    | -------- | Result: true 
    |   | 
    |____________| ----------  Result: false 

किसी को भी ऐसा करने के तरीके का सुझाव कर सकते हैं? मैं नहीं जानना चाहता कि कौन सा बिंदु यह है कि, मैं सिर्फ यह जानना चाहता हूं कि वहां है या नहीं।

धन्यवाद मदद

+6

स्पष्ट ASCII कला के लिए +1 :) – alex

+0

"कोहेन सुथरलैंड" के लिए एक त्वरित Google आपको सही दिशा में शुरू करना चाहिए। –

+0

प्रत्येक किनारे पर विचार करें क्योंकि यह स्वयं का लाइन सेगमेंट है। फिर यह लाइन-सेगमेंट चौराहे को निर्धारित करने का मामला है * और * वह मामला जहां यह पूरी तरह से निहित है। बेशक, यह सिर्फ एक त्वरित अवलोकन है और इस प्रकार के चौराहे को हल करने का * आदर्श * तरीका नहीं है (यह भी वास्तव में एक आम अंतर है - अगर यह एक मूल प्रश्न है तो मैं वास्तव में आश्चर्यचकित हूं ;-) –

उत्तर

5

पहले और तीसरे मामलों के लिए एक बहुत तुच्छ कर रहे हैं - बस सच वापसी करता है, तो रेखा के दोनों endpoint बॉक्स के अंदर (अर्थात> कुल्हाड़ी और ay, < bx और से) है।

दूसरा समस्या प्रस्तुत करता है - हम अब हमारी लाइन के अंतराल पर भरोसा नहीं कर सकते हैं। इस मामले में, हमें आयताकार के प्रत्येक किनारे के साथ रेखा का परीक्षण करना होगा।

हमारी लाइन के लिए समीकरण (x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0 होगा, और हम कोनों का उपयोग करके आयताकार के प्रत्येक पक्ष के लिए एक समान समीकरण बना सकते हैं। उसके बाद, आयत के किनारों के लिए समीकरण को हमारी रेखा में प्रतिस्थापित करने से हमें चौराहे मिल जाएगी।

अंत में, हम यह सुनिश्चित करने के लिए जांच करते हैं कि बिंदु आयत के किनारे की सीमाओं के भीतर है, और इसी तरह लाइन खंड के भीतर हम विचार कर रहे हैं।

this discussion में इसका एक और विस्तृत विवरण है।

+2

2) मेरे लिए सही प्रतीत नहीं होता है। खंड (-1,0) - (1,3) बनाम इकाई वर्ग (0,0 से 1,1) के मामले को उदाहरण के लिए लें। – Jimmy

+0

आप सही हैं! इससे झूठी सकारात्मक उत्पन्न होगी। मैं अपना जवाब अपडेट करूंगा। –

+0

हाय मदद के लिए बहुत बहुत धन्यवाद। – user427969

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

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