मैं एक 2 डी वेक्टर के लिए लंबवत कैसे पा सकता हूं?


20

मैं एक शीर्ष डाउन गेम बना रहा हूं जहां खिलाड़ी माउस कर्सर की स्थिति की ओर अग्रसर होता है। खिलाड़ी के आंदोलन कोड के हिस्से के रूप में, मुझे एक वेक्टर निर्धारित करना होगा जो खिलाड़ी के वर्तमान सामना करने वाले वेक्टर (स्टर्लिंग व्यवहार को लागू करने के लिए) के लंबवत हो।

मैं किसी दिए गए 2D वेक्टर के लंबवत वेक्टर की गणना कैसे कर सकता हूं?

जवाबों:


41

एक और 2 डी वेक्टर के लिए 2 डी वेक्टर सीधा पाने के लिए Xऔर Yघटकों को स्वैप करें , नए Yघटक को नकार दें । तो { x, y }बन जाता है { y, -x }


10
ध्यान दें कि दो संभावनाएं हैं, और यह आपको बाएं हाथ के लंबवत वेक्टर मिलेगा। (-y | x) राइट-हैंड साइड वेक्टर है।
ट्रैविसग

1
आपको पारंपरिक कन्वेंशन द्वारा CCW रोटेशन करने के लिए y अक्ष को नकारना चाहिए।
रैंडीगौल

@TravisG मुझे लगता है कि आपने बाएँ और दाएँ को मिला दिया है? -y, x) बाएं हाथ का सीधा वेक्टर है और (y, -x) मेरी गणना से RHS है।
पेटेउक

12

मैं हमेशा यह भूल जाता हूं कि जब मुझे इसकी आवश्यकता होती है तो मैं यह कैसे कर सकता हूं इसलिए मैंने कुछ विस्तार विधियां लिखीं।

    public static Vector2 PerpendicularClockwise(this Vector2 vector2)
    {
        return new Vector2(vector2.Y, -vector2.X);
    }

    public static Vector2 PerpendicularCounterClockwise(this Vector2 vector2)
    {
        return new Vector2(-vector2.Y, vector2.X);
    }

और एक इकाई परीक्षण

    [Test]
    public void Vector2_Perpendicular_Test()
    {
        var a = new Vector2(5, -10);
        var b = a.PerpendicularClockwise();
        var c = a.PerpendicularCounterClockwise();

        Assert.AreEqual(new Vector2(-10, -5), b);
        Assert.AreEqual(new Vector2(10, 5), c);
    }

लम्बवत रेखायें


यदि आपके पास एक वेक्टर (5, -10) है, तो यह चतुर्थांश 4 में होगा, है ना? यदि आप इसे दक्षिणावर्त घुमाते हैं, तो क्या यह चतुर्थांश 3 में नहीं होगा अर्थात दोनों घटक नकारात्मक होंगे? क्या आपने अपने कार्यों को मिला दिया है?
पेटूका

वे दूसरी तरह के आसपास हैं। PerpendicularCounterClockwise लौटाना चाहिए (10,5) और PerpendicularClockCinc (-10, -5) वापस आना चाहिए।
opetroch

2
ओह माय .. ये 3 साल से गलत था। जिसने भी इसका इस्तेमाल किया, उसके लिए मेरी माफी। मैंने अब जवाब तय कर लिया है और यह साबित करने के लिए एक आरेख बनाया है कि यह इस समय समझ में आता है। इसे इंगित करने के लिए @opetroch और PeteUK को धन्यवाद। खेद है कि इसे ठीक करने में इतना समय लगा।
craftworkgames

4

यदि (कुल्हाड़ी, ay), तो एक प्रति-वामावर्त 90 डिग्री से रोटेशन द्वारा प्राप्त किया गया, अर्थात(-एय, कुल्हाड़ी)

इस लिंक को देखें :)

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