سؤال

يعرف خلاف ذلك باسم الحافة الثابتة، هذا خط لا يمكن أن يعبر الفأرة. مفيدة في الألعاب وما شابه ذلك.

حاليا، لدي وظيفة تعود إذا كان مؤشر الماوس في مضغوط مرسوم على الشاشة. إذا لم يكن الأمر كذلك، فأنا نقل مؤشراتي إلى آخر نقطة مخزنة كانت في المضلع.

    if (!PointInPolygon(local, polyGon))
    {
        Cursor.Position = safePoint;
    }
    else
    {
        safePoint = Cursor.Position;
    }

أنا لا أحب هذا لأسباب زوجين:

  • نظرا لبطء التحديث أوقات أو لأي سبب من الأسباب، أنا قادر في بعض الأحيان على الخروج من المربع. ثم يقوم هذا بمخازن هذا الموقف ك SafePoint، خارج المضلع. فأنا عالق بعد ذلك في هذا الموقف.

  • يجب أن الحواف المنحدرة من الفأرة في اتجاه المنحدر. دفع الأفق الأيمن من الماوس يجب أن ينتهي الجدار "/" على شكل مؤشر في الزاوية اليمنى العليا. ولكن بسبب طبيعة هذا النهج، فإن الذهاب فوق الخط سيشديد المؤشر إلى حيث كان ذلك سابقا. الاستمرار في دفع الحق لن يستمر إلا إعادة تعيين المؤشر، ولن يدفعه "حتى المنحدر".

هل هناك أي أساليب أخرى لمعالجة هذه المشكلة؟ أنا قلق أساسا بشأن العدد الأخير: هذا السلوك مستعرض المنحدر هو الهدف الرئيسي لبرنامجي وأحتاج إلى عمله. حتى لو استخدمت هذه الطريقة الأساسية، أي أفكار لتحسين هذا السلوك المحدد؟


تعديل:

وقد اقترح من قبل ريد أنني أعود بدلا من ذلك إلى النقطة الأقرب إلى النقطة الحالية خارج الحدود. بالنظر إلى نقاط الركن 4 من رباعي، كيف يمكنني العثور على أقرب نقطة في / على الشكل؟

هل كانت مفيدة؟

المحلول 3

  1. ابحث عن معادلة خط الحافة باستخدام نقاط النهاية.
  2. - (1 / slope) يعطي ميل الخط العمودي.
  3. حل لمعادلة خط خط عمودي باستخدام النقطة المعروفة عبر الحافة (موقع الماوس الحقيقي)
  4. حل تقاطع خط حافة وخط عمودي.
  5. ضع المؤشر المزيف في هذا الموقع.

نصائح أخرى

بدلا من تتبع "Safepoint"، سأقوم بما يلي:

إذا وجدت خارج المضلع الخاص بك، فبدلا من العودة إلى آخر نقطة آمنة معروفة، ضع الماوس إلى أقرب نقطة في / في المضلع إلى موقع الماوس الحالي. هذا سيساعد على الشعور، وكذلك، لأن المؤشر يميل إلى (ببطء) اتبع المنحدرات على حافة المضلعات، إلخ.

كما أنه يلغي الحاجة إلى حفظ الحالة بين المكالمات (SafePoint).

كيفية تقييد النقطة ب داخل محدب مضلع (غير محدب أصعب بعض الشيء) في 2-D (تفترض ترتيب متعرج في اتجاه عقارب الساعة):

لكل حافة (بي، PJ) من المضلع ...

العثور على ناقل العادي ن من الحافة (ناقلات الوحدة يشير من بي. ل جهد, استدارة 90 درجة)

العثور على النزوح د من الحافة إلى نقطة ب على امتداد ن ( d = (p - pi) dot n )

إذا د هو إيجابي (أو سلبي لترتيب متعرج عقارب الساعة)، ثم ص = ص - ن * د

نهاية حلقة :)

أقرب نقطة:

if(mouse.x > maxX) 
    mouse.x = maxX;
else if(mouse.x < minX)
    mouse.x = minX;

// same for Y.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top