سؤال

يمكن للمستخدمين رسم في تطبيقي باستخدام أداة بسيطة للغاية (نقل الماوس أثناء الضغط على LMB). ينتج عن هذا سلسلة من أحداث Mousemove وأسجل موقع المؤشر في كل حدث. يميل منحنى polyline الناتج إلى أن يكون كثيفًا إلى حد ما ، مع وجود نقاط مسجلة تقريبًا كل بكسل آخر. أرغب في تهدئة هذا الخط البولي المترسع ، لكنني لا أريد أن ننعيم الخلل المقصود. إذن كيف يمكنني معرفة مكان وجود kinks؟

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

Polyline Tracker http://www.freeimagehosting.net/uploads/c83c6b462a.png

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

المحلول

قد يكون ما تصفه مرتبطًا بتقنيات التعرف على الإيماءات ، لذلك يمكنك البحث عنها عن الأفكار.

النهج الواضح هو تطبيق منحنى نوبة ، ولكن هذا سيكون له تأثير على تجانس جميع التفاصيل والكرات المثيرة للاهتمام. هناك طريقة أخرى مقترحة وهي النظر في السرعات والتسارع ، ولكن يمكن أن تصبح شعرًا (يمكن أن تكون تغييرات الاتجاه سريعة جدًا أو بطيئة جدًا ومتعمدة)

النهج الأساسي إلى حد ما الفعال هو تبسيط العينات مباشرة في خط متعدد.

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

يجب أن تكون حذراً بشأن عتباتك عندما تكون العينات قريبة جدًا من بعضها البعض ، لذلك قد ترغب في ضبط الحساسية عندما تتعلق بالعينات التي تقل عن 4-5 بكسل عن بعضها البعض.

سيعطيك هذا مجموعة من الخطوط المستقيمة التي ستتبع المسار الأصلي بدقة إلى حد ما.

إذا كنت تحتاج إلى تجانس إضافي ، أو ترغب في إنشاء رسم متجه قابل للتطوير ، فيمكنك المنحنى من البولي. أولاً ، حدد kinks (الأماكن الموجودة في خط polyline حيث تكون الزاوية بين سطر واحد والآخر حادًا - على سبيل المثال ، يعتبر أي شيء يزيد عن 140 درجة منحنى ناعم ، أي شيء أقل من ذلك يعتبر مخطوداً) ويكسر الخطوط البولي في تلك الانقطاعات . ثم منحنى كل من هذه الأقسام الفرعية من الإيماءة الأصلية لتنعيمها. سيكون لهذا تأثير تجانس الأشياء الملساء وشحذ الخلل. (يمكنك الذهاب إلى أبعد من ذلك وإدراج شرائح زاوية ناعمة صغيرة بدلاً من هذه المفاصل الحادة لتقليل حدة الوصلات)

القوة الغاشمة ، لكنها قد تحقق فقط ما تريد.

نصائح أخرى

بدلاً من محاولة القيام بذلك من البيانات الناتجة ، هل فكرت في النظر في توقيت البيانات كما تأتي؟ إذا توقف الماوس أو يتباطأ بشكل ملحوظ ، فأنت تستخدم الاتجاه منذ آخر "Kink" (آخر مرة تباطأت الماوس) لتأسيس اتجاه السفر. إذا خرج المستخدم في اتجاه جديد ، فإنك تسميها kink ، وإلا ، فأنت تتجاهل الاتجاه التباطؤ الحالي وتبدأ في انتظار الاتجاه التالي.

حسنًا ، ستكون إحدى الطرق هي استخدام خوارزمية حقيقية للمنحنى. قم بإنشاء منحنى Bezier (مع نقاط النهاية الدقيقة ، باستخدام Catmull-Rom أو شيء مشابه) ، ثم قم بتحسين الإرشاد والتكرار (باستخدام المسافة من نقاط الخط الفعلية كمقياس تكلفة). قد يكون هذا معقدًا للغاية بالنسبة لحالات الاستخدام الخاصة بك.

سجل الترتيب يتم رسم وحدات البكسل فيه. ثم ، قم بحساب الميل بين وحدات البكسل التي تكون "قريبة" وليس "قريبة". أظن أن رسمًا بيانيًا للمنحدر بين البكسل (I) والبكسل (I+7) قد يعرضون "قفزات" يمكن تحديدها بسهولة حول kinks في المنحنى.

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