5

मुझे एक विशेष लाइन-टक्कर एल्गोरिदम बनाने में मदद की ज़रूरत है जो कुछ कोणों पर "कोनों को काटने" की अनुमति देता है।एक गेम (भाषा अज्ञेयवादी) के लिए ट्रिकी लाइन एल्गोरिदम

निम्नलिखित चित्रों में, नीले वर्ग को खिलाड़ी का प्रतिनिधित्व करने दें और काला वर्ग दीवार का प्रतिनिधित्व करता है। सफेद वर्ग है, तो, का प्रतिनिधित्व एक खिलाड़ी की (मान्य वर्ग) "दृष्टि की रेखा" में वर्गों, और ग्रे वर्गों (अवैध वर्ग) एक खिलाड़ी की "दृष्टि की रेखा" बाहर वर्गों हैं:

img1

:

img2

की इस पंक्ति जो दीवार के कोने पर गुजर के बावजूद अनुमति दी है को करीब से देख लेते हैं: दूसरी छवि जहां चीजें अधिक दिलचस्प के रूप में हम काटने कोनों शुरू मिलता है 210

img3

लाइन की अनुमति दी है क्योंकि:

  • dx < = 0.5 (एक वर्ग 1x1 बताते हैं)
  • dx/डीवाई (2 एक निश्चित अनुपात से ऊपर है कहते हैं - मैं इन चित्रों में प्रतिनिधित्व सही मूल्य के बारे में सुनिश्चित नहीं हूँ)

बातचीत लाइन की अनुमति नहीं है क्योंकि इस मामले में वि/dx) के अनुपात (बहुत कम है:।

img4

या शायद मैं प्रवेश वर्ग .... से बाहर निकलने बनाम के कोण के बारे में बात करनी चाहिए

मुख्य समस्या मैं आ रही है कि मैं समझ नहीं कैसे कर सकते हैं ग्रिड पर दो बिंदुओं के बीच किसी भी कोण पर यात्रा करने वाले वैक्टरों के लिए एक समाधान को सामान्यीकृत करना। मैं तय नहीं कर सकता कि मुझे त्रिकोणमिति का उपयोग करना चाहिए या क्या। मेरा सबसे निकटतम समाधान अब तक प्रत्येक वर्ग के साथ डीएक्स और डाई के रूप में लाइन अवरोधों के दशमलव हिस्सों का उपयोग करना है और जांच करें कि क्या यह लाइन की ढलान के आधार पर है और इसमें कौन सा चतुर्भुज है।

क्या कोई मदद कर सकता है?

मैंने उधार लेने या अन्य लाइन एल्गोरिदम से शुरू करने पर भी ध्यान दिया है, लेकिन मुझे कुछ भी उपयोगी नहीं मिला है। उनमें से अधिकतर मैंने देखा है कि (x1, y1) से (x2, y2) (x2, y2) से (x1, y1) के समान होना चाहिए जो इस समस्या को काफी अलग करता है।

+0

से बचना चाहते हैं, तो मुझे लगता है कि आप कई दीवारें प्राप्त कर सकते हैं, और वे हमेशा खिलाड़ी की स्थिति के निकट नहीं हैं? क्या आप अपना वर्तमान एल्गोरिदम पोस्ट कर सकते हैं (कम से कम छद्म कोड)? – Groo

+5

मेरा पहला विचार यह देखना है कि रेखा वर्ग के केंद्र में कितनी करीब हो जाती है। लेकिन आपके दूसरे उदाहरण में, यह मुझे समझ में नहीं आता है कि यह प्रक्रिया सममित नहीं है: मैं आपको देख सकता हूं, लेकिन आप मुझे नहीं देख सकते हैं? – Teepeemm

+0

बिल्कुल, टीपेम: बिंदु ए से बी की रेखा आमतौर पर बिंदु बी से ए के समान नहीं होती है, जब dx! = Dy! = 0. मैं देखता हूं कि मुझे एक स्यूडोकोड उदाहरण मिल सकता है या नहीं। –

उत्तर

1

मैं मंडलियों का उपयोग करने का सुझाव देता हूं, वे काफी अनुकूल कोने के अनुसार हैं।

मुझे लगता है कि प्रत्येक पिक्सल के केंद्र में निर्देशांक लिया जाता है।

जानते हुए भी अगर (XO, यो) से (Xa, फिर) को देखने के लिए छिपा है एल्गोरिथ्म (XB, वाई बी) तो होगा:

  • गणना (XC, वाईसी) के सबसे नजदीक बिंदु (XO, यो) से (XC, वाईसी) तो < आधा पिक्सेल, d
  • अगर (XO, यो) से करने के लिए (XB, वाई बी)
  • गणना दूरी घ से लाइन (Xa, फिर) पर दृश्य छिपा हुआ है

आप पहले दो चरणों को सीधे गणना करके सरल बना सकते हैं यदि आप sqrt

+0

यह कोनों को काटने की अनुमति देता है, लेकिन यह इस तथ्य के लिए जिम्मेदार नहीं है कि (xa, ya) से (xb, yb) की अनुमति हो सकती है, लेकिन (xb, yb) से (xa, या) अनुमति नहीं है, कि अगर वे एक निश्चित कोण से नीचे प्रवेश करते हैं तो कोनों को केवल काटा जा सकता है। –

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