यदि आप 2 पंक्तियों की ओर या दूर का सामना कर रहे हैं, तो आप कैसे गणना करेंगे?


10

2 पंक्ति खंडों का वर्णन करने वाले 4 बिंदुओं को देखते हुए, यदि आप रेखा A से रेखा B की ओर या दूर हैं, तो आप कैसे गणना करेंगे?

2 लाइनों की एक निश्चित लंबाई होती है, और इसे X1 / y1 से x2 / y2 तक की दूरी के रूप में मापा जा सकता है।

यहाँ छवि विवरण दर्ज करें


सीधे रेखाओं के साथ केस से अलग bezier वक्र के साथ मामला कैसे है? क्या आपके पास एक वक्र है जो पूरी तरह से दूसरी पंक्ति को संलग्न कर सकता है (ताकि हर दिशा "ओर" हो)?
बुमज़ैक

1
आपको शायद अपनी शर्तों को स्पष्ट करना होगा। ज्यामिति में, एक "लाइन" आधी दिशा या खंड के विपरीत, दोनों दिशाओं में असीम रूप से विस्तारित होती है, इसलिए 2 रेखाएं हमेशा पार करती हैं जब तक कि वे समानांतर न हों। आप किसके बारे में पूछ रहे हैं? आपने एक तीर खींचा है, जिसका अर्थ है दिशा, जो मेरे लिए एक खंड या सबसे अधिक अर्ध-रेखा का अर्थ है। और "की ओर" और "दूर" की आपकी परिभाषा क्या है?
हैकवर्थ

बेज़ियर वक्र एक किरण-रेखा प्रतिच्छेद परीक्षण को हल करने के लिए आवश्यक समानता का प्रतिनिधित्व करने के लिए कठिन हो सकता है। वैसे, मैं उस शब्द को बदल दूंगा जो आपके तीर को "रे" में दर्शाता है। आपको जल्दी प्रतिक्रिया मिल सकती है। मैं यह जवाब दूंगा अगर मेरे पास लंच के दौरान समय है अगर कोई और नहीं करता है। यदि नहीं, तो यह खेलों में एक अत्यंत सामान्य कार्य है। Google "रे लाइन खंड खंड परीक्षण"। मुझे संदेह है कि बेज़ियर वक्र परीक्षण समान है, लेकिन मैंने कभी इसकी कोशिश नहीं की।
ब्रैंडन

3
आपको अपने प्रश्न को दो भागों में विभाजित करना चाहिए। लाइन सेगमेंट वाला हिस्सा बहुत आसान है। बेज़ियर कर्व्स वाला हिस्सा बेहद जटिल है और इसमें केवल अनुमानित संख्यात्मक समाधान है।
सैम होसेवर

मैंने अपना प्रश्न 2 में विभाजित किया है, जैसा कि अनुरोध किया गया है। दूसरा भाग यहां है: gamedev.stackexchange.com/questions/21463/…
Robinicks

जवाबों:


11

बता दें Aऔर Bकाली रेखा पर दो बिंदु हैं। चलो Cऔर Dअपने नीले खंड हो। zक्रॉस उत्पाद के समन्वय का संकेत AB^ACआपको बताता है कि क्या Cकाली रेखा के "बाएं" या "दाएं" हैं। इसी तरह, क्रॉस उत्पाद AB^CDआपको बताता है कि क्या CDकाली लाइन के "बाएं" या "दाएं" हैं।

हम वास्तव में जानना नहीं चाहते हैं कि यह सही है या नहीं; हम चाहते हैं कि यह सुनिश्चित हो कि वे एक ही दिशा या विपरीत दिशा हैं, इसलिए हम दो मूल्यों को गुणा करते हैं।

निम्नलिखित छद्मकोश को इसलिए काम करना चाहिए:

z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;

if (z3 < 0)
    ; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
    ; /* Pointing away */
else
    ; /* Parallel */

मुझे डर है कि मुझे बेजियर वक्र के लिए एक उचित समाधान लिखने के लिए कुछ समय चाहिए। निम्नलिखित स्थिति की ओर या दूर है?

मुसीबत?


कर्व के लिए, मेरा मानना ​​है कि आप अपने लाइन सेगमेंट के सबसे करीब बिंदु पर वक्र की स्पर्शरेखा को पा सकते हैं और इसी तरह से आप अपने अन्य लाइन सेगमेंट का परीक्षण कर सकते हैं। शायद थोड़ा कठिन लगता है :)
१०

@ स्टेपहेल्टन: बीज़ियर कर्व्स के लिए दूसरी तस्वीर को फिर से देखें, जो एक वक्र की ओर इंगित करता है जो दूर घटता है। या संभवतया अन्तर्विभाजक खंड के समानांतर एक स्पर्शरेखा के साथ एक वक्र पर विचार करें, लेकिन जो खंड और चौराहों की ओर घटता है।
कास्कैबेल

ट्रोलफेस के लिए +1, और अच्छा गणित :)। हालाँकि आपके 'आरेख' की ओर वास्तव में अभी भी एक 'दूर' है - बस लाइन के शुरुआती बिंदु को ऊपर ले जाएं।
जोनाथन डिकिंसन

@JonathanDickinson धन्यवाद, मैंने इसे थोड़ा स्पष्ट करने के लिए छवि को अपडेट किया कि मेरी पूछताछ क्या है!
सैम होसेवर

2

प्रारंभ बिंदु मान लेना हरे रंग का चक्र है, और अंतिम बिंदु लाल तीर है

प्रारंभ बिंदु के बीच की दूरी को DS और काले खंड के रूप में गणना करें, और DE के रूप में अंतिम बिंदु (लाल तीर) के लिए भी ऐसा ही करें। यदि DS> DE, तो खंड की ओर इशारा कर रहा है। अगर DE> DS, यह इंगित कर रहा है। यदि दोनों समान हैं, तो दोनों समानताएं हैं।

आप किसी सेगमेंट में एक बिंदु से दूरी की गणना करने के लिए कैसे मिल सकता है यहाँ और एक द्विघात बेज़ियर वक्र करने के लिए, यहाँ । हालांकि, बीज़ियर वक्र के आकार के आधार पर, यह अजीब परिणाम दे सकता है (वक्र खुद को पार कर सकता है)


DS> DE को केवल सीधी रेखा के लिए काम करने की गारंटी है। यह बेज़ियर के लिए विफल हो सकता है। इसके अलावा, आप "की ओर" उसकी परिभाषा नहीं जानते हैं। यदि तीर का विस्तार 2 बिंदुओं द्वारा परिभाषित रेखा को पार कर जाएगा, लेकिन समान बिंदुओं द्वारा परिभाषित खंड नहीं है , तो क्या यह अभी भी "की ओर" है?
हैकवर्थ

मैं दो खंडों की बात कर रहा हूं, रेखाओं की नहीं, इसलिए "तीर का विस्तार" नहीं है। इसके अलावा, यह कोई फर्क नहीं पड़ता कि तीर कहाँ इंगित करता है, क्योंकि हम यहाँ दूरियों के बारे में बात कर रहे हैं। काली रेखा पर निकटतम बिंदु काली रेखा का प्रारंभ / अंत बिंदु हो सकता है, इससे कोई फर्क नहीं पड़ता। दो खंडों का टकराना हो सकता है, यह विधि अभी भी इच्छानुसार काम करेगी। Bezier घटता के लिए मैंने उल्लेख किया कि यह वक्र के आकार के आधार पर अजीब परिणाम देगा।
रावचोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.