एक हेक्सागोनल क्लिकबॉक्स को पहचानना


17

मैं एक ऐसे खेल पर काम कर रहा हूं जिसमें हांफनाक्स शामिल है ।

वर्तमान में, मेरे पास एक षट्भुज छवि है जो मैं उपयोग कर रहा हूं (सभी पक्ष एक ही लंबाई के हैं ... यह 50px तक 50px में फिट होता है)।

मैं C # के लिए कुछ नया हूँ और XNA के लिए वास्तव में नया हूँ, लेकिन क्या कोई आसान तरीका है जिसे मैं बिंदुओं और कोणों के आधार पर कथन के अनुसार हल करने के बजाय कह सकता हूँ?


Gamedev.stackexchange.com/questions/6382/… देखें जो हेक्स क्लिक का पता लगाता है
टिम होल्ट

4
मैंने पूरी तरह से "हांफनागन्स" को गॉगल किया, मैं ऐसा था, "यह किस तरह का षट्भुज है ?!" लगता है मैं एक धीमी गति से दिन रहा हूँ।
MichaelHouse

2
हम्म अगर आप हेक्सागोन के बजाय हांफने में क्लिक करते हैं तो क्या होता है?
टिम होल्ट

1
अपनी आवश्यकताओं पर निर्भर करता है, एक साधारण चक्र अगर यह सिर्फ एक क्लिक क्षेत्र के लिए होगा। अन्यथा आप बहुभुज तकनीक पर एक बिंदु का उपयोग करने जा रहे हैं जैसे घुमावदार योग या समसुख।
फिल्पक

जब तक हेक्स मानचित्र को मनमाने ढंग से घुमाना नहीं है, बहुभुज पर बिंदु MAJOR ओवरकिल है। आप 1000x1000 हेक्स के मानचित्र के साथ क्या करते हैं? हर एक की जाँच करें? RE: सर्किल, वे काम नहीं करेंगे। तीन हेक्स के बीच जंक्शन शीर्ष के पास, आपके पास तीन सर्कल ओवरलैपिंग होंगे। हेक्स के भीतर पूरी तरह से झूठ बोलने वाले छोटे सर्कल में अंतराल होंगे जहां कानूनी क्लिक किसी भी सर्कल में नहीं होंगे।
टिम होल्ट

जवाबों:


18

एक हेक्सागोन एक आयताकार है जिसमें क्लैप्ड कोनों होते हैं। जिस तरह से मैंने इसे देखा है, और मैंने सुना है कि सभ्यता की श्रृंखला इस तरह से ऑर्थोगोनल मैप्स के साथ करती है, एक सफेद स्थान (ऑर्थोगोनल या हेक्सागोनल) के साथ एक बिटमैप बनाने के लिए है, और एक लाल, हरे, नीले और पीले रंग में कोने। (या जो भी रंग आपको पसंद हो।)

षट्कोणीय: हेक्स मास्कयायहां छवि विवरण दर्ज करें

ओर्थोगोनल: यहां छवि विवरण दर्ज करें

फिर, यह निर्धारित करें कि कर्सर किस आयत पर है, और उस स्थान पर पिक्सेल के रंग का परीक्षण करें। यदि यह सफेद है, तो वे उस स्थान पर मँडरा रहे हैं। एक दूसरे रंग को ऑफसेट किया जाता है, और वे इसके बजाय उस षट्भुज पर मँडराते हैं। यह तरीका कुशल है, थोड़ा ज्यामिति लेता है, और किसी भी मनमाने ढंग से अंतरिक्ष को खाली करने के लिए इस्तेमाल किया जा सकता है।


बस एक नोट: एक षट्भुज की लंबाई 6 बराबर है। आपके द्वारा प्रस्तुत चित्रों में से कोई भी वास्तव में हेक्सागोन नहीं है। इसके बजाय, वे 6 पक्षीय बहुभुज होते हैं। इसके अलावा, यह विधि काम करती है। यह षट्भुज की सीमाओं की गणना करने की तुलना में अधिक बड़ा है, हालांकि, बड़े हेक्सागोन्स के लिए, क्योंकि इस विधि को बड़े हेक्सागोन्स के लिए अधिक स्थान की आवश्यकता होती है (यदि आप प्रति पिक्सेल सटीकता रखना चाहते हैं)। छोटे हेक्सागोन्स (और हार्डवेयर पर निर्भर करता है) के लिए, यह विधि संभवतः सीमा की गणना करने की तुलना में तेज़ है।
ओल्होव्स्की

9
एक षट्भुज किसी भी 6 पक्षीय बहुभुज है। आप जो सोच रहे हैं वह एक समभुज षट्भुज है (वास्तव में, आप शायद एक नियमित षट्भुज के बारे में सोच रहे हैं , जो एक प्रकार का समबाहु और समभुज षट्भुज है)
Random832

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

2
@ ओल्हाव्स्की - मैंने यहां एक सही षट्भुज मुखौटा नहीं बनाया है क्योंकि मैं काम के दौरान अपने कुछ मिनटों के ब्रेक के दौरान एक सामुदायिक सेवा के रूप में सवालों का जवाब दे रहा हूं, और वास्तव में वीडियो गेम नहीं लिख रहा हूं। ओपी कम गणित के साथ एक समाधान की तलाश में था, और मुझे लगा कि यह साफ-सुथरा था, इसलिए मैंने सोचा कि मैं साझा करूंगा, क्योंकि यह कुछ ऐसा है जो मैंने निश्चित रूप से अपने दम पर नहीं सोचा होगा।
dlras2

18

कोई एक्सएनए विधि नहीं है जो षट्भुज हिट परीक्षण करता है।

यह लेख बताता है कि एक फ़ंक्शन कैसे लिखना है जो परीक्षण करता है, और आपको फ़ंक्शन देता है:

कैसे जांचा जाए कि कोई प्वाइंट हैक्सागन के अंदर है या नहीं

यहाँ उस लेख से एक सारांश है: हेक्सागोन क्लिक बॉक्स

और परीक्षण करने वाला फ़ंक्शन इस तरह से होता है:

  1. षट्भुज के चारों ओर बाउंडिंग बॉक्स का परीक्षण करें, यदि वह इसे प्रतिच्छेद नहीं करता है तो जल्दी से बाहर निकले।
  2. जैसा कि ऊपर दिखाया गया है, स्थानीय क्वाड्रेंट में बिंदु को परिवर्तित करें।
  3. isInsideस्थानीय चतुर्थांश के लिए निम्नलिखित परीक्षण करें ।

public function isInside(pos:Vec2Const):Boolean
{
    const q2x:Number = Math.abs(pos.x - _center.x);       
    const q2y:Number = Math.abs(pos.y - _center.y);
    if (q2x > _hori || q2y > _vert*2) 
        return false;
    return 2 * _vert * _hori - _vert * q2x - _hori * q2y >= 0;
}

पूर्ण विवरण के लिए लेख देखें।


यहां कुछ अन्य उपयोगी संबंधित स्रोत दिए गए हैं:


1

यहाँ मुझे एक विधि मिली जिसका उपयोग किसी भी बहुभुज के अंदर क्लिकों का पता लगाने के लिए किया जा सकता है:

public bool PointInPolygon( Vector2 p, Vector2[] poly )
    {
        Vector2 p1, p2;
        bool inside = false;

        if( poly.Length < 3 )
        {
            return inside;
        }

        Vector2 oldPoint = new Vector2( poly[poly.Length - 1].X, poly[poly.Length - 1].Y );

        for( int i = 0; i < poly.Length; i++ )
        {
            Vector2 newPoint = new Vector2( poly[i].X, poly[i].Y );

            if( newPoint.X > oldPoint.X )
            {
                p1 = oldPoint;
                p2 = newPoint;
            }
            else
            {
                p1 = newPoint;
                p2 = oldPoint;
            }

            if( ( newPoint.X < p.X ) == ( p.X <= oldPoint.X )
                && ( (long)p.Y - (long)p1.Y ) * (long)( p2.X - p1.X )
                 < ( (long)p2.Y - (long)p1.Y ) * (long)( p.X - p1.X ) )
            {
                inside = !inside;
            }

            oldPoint = newPoint;
        }

        return inside;
    }

आपको अपने हेक्सागोन के कोनों को एक वेक्टर 2 सरणी (पाली) और विधि पर क्लिक की गई स्थिति (पी) में देने की आवश्यकता है।

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