سؤال

لدي حاليًا عنصر تحكم أحتاج إلى إضافة القدرة عليه لتطبيق حدة (أو حساسية) مختلفة.المشكلة موضحة بشكل أفضل في الصورة:

الرسم البياني http://img87.imageshack.us/img87/7886/control.png

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

أعلم أن الأسي شديد الانحدار، ولكن لا يبدو أنه يرسم طريقًا للمضي قدمًا.أي اقتراحات من فضلك؟

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

المحلول

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

بيانيا، يبدو مثل هذا:

alt text
(مصدر: wikimedia.org)

إذن، مع كون ذلك مصدر إلهام، إليك الرياضيات...

إذا كانت قيم x تتراوح بين 0 و1، فستكون الوظيفة بسيطة إلى حد ما:

y = f(x, gamma) = x ^ gamma

أضف قيمة xmax للقياس (على سبيل المثال.x = 0 إلى 100)، وتصبح الدالة:

y = f(x, gamma) = ((x / xmax) ^ gamma) * xmax

أو بدلا من ذلك:

y = f(x, gamma) = (x ^ gamma) / (xmax ^ (gamma - 1))

يمكنك أن تأخذ هذه الخطوة إلى الأمام إذا كنت تريد إضافة xmin غير الصفر.

عندما تكون قيمة جاما 1، يكون الخط دائمًا خطيًا تمامًا (y = x).إذا كانت x أقل من 1، فإن منحنىك ينحني للأعلى.إذا كانت x أكبر من 1، فإن منحنىك ينحني للأسفل.القيمة المتبادلة لجاما ستحول القيمة مرة أخرى إلى القيمة الأصلية (x = f(y, 1/g) = f(f(x, g), 1/g).

ما عليك سوى ضبط قيمة جاما وفقًا لذوقك الخاص واحتياجات التطبيق.نظرًا لأنك تريد منح المستخدم خيارات متعددة "لتعزيز الحساسية"، فقد ترغب في منح المستخدمين خيارات على مقياس خطي، على سبيل المثال تتراوح من -4 (الأقل حساسية) إلى 0 (بدون تغيير) إلى 4 (الأكثر حساسية) )، وقم بقياس قيم جاما الداخلية لديك باستخدام وظيفة الطاقة.بمعنى آخر، أعط المستخدم خيارات (-4، -3، -2، -1، 0، 1، 2، 3، 4)، ولكن قم بترجمة ذلك إلى قيم جاما (5.06، 3.38، 2.25، 1.50، 1.00) ، 0.67، 0.44، 0.30، 0.20).

قد يبدو الترميز في C# كما يلي:

public class SensitivityAdjuster {
    public SensitivityAdjuster() { }
    public SensitivityAdjuster(int level) {
        SetSensitivityLevel(level);
    }
    private double _Gamma = 1.0;
    public void SetSensitivityLevel(int level) {
        _Gamma = Math.Pow(1.5, level);
    }
    public double Adjust(double x) {
        return (Math.Pow((x / 100), _Gamma) * 100);
    }
}

لاستخدامه، قم بإنشاء SensitivityAdjuster جديد، وقم بتعيين مستوى الحساسية وفقًا لتفضيلات المستخدم (إما باستخدام المنشئ أو الطريقة، ومن المحتمل أن تكون -4 إلى 4 قيم مستوى معقولة) واستدعاء Adjust(x) للحصول على قيمة الإخراج المعدلة .إذا كنت تريد نطاقًا أوسع أو أضيق من المستويات المعقولة، فيمكنك تقليل أو زيادة قيمة 1.5 في أسلوب SetSensitivityLevels.وبالطبع يمثل الرقم 100 الحد الأقصى لقيمة x.

نصائح أخرى

أقترح صيغة بسيطة (على ما أعتقد) تلبي متطلباتك.من أجل الحصول على "ربع دائرة" كاملة، وهي حالتك القصوى، يمكنك استخدامها (1-cos((x*pi)/(2*100)))*100.

ما أقترحه هو أن تأخذ متوسطًا مرجحًا بين y=x و y=(1-cos((x*pi)/(2*100)))*100.على سبيل المثال، لكي تكون قريبًا جدًا من الخطي (99% خطيًا)، خذ ما يلي:

y = 0.99*x + 0.01*[(1-cos((x*pi)/(2*100)))*100]

أو بشكل أكثر عمومية، لنفترض أن مستوى الخطية هو L، وهو يقع في الفترة [0، 1]، وستكون صيغتك:

y = L*x + (1-L)*[(1-cos((x*pi)/(2*100)))*100]

يحرر:لقد تغيرت cos(x/100) ل cos((x*pi)/(2*100)), ، لأنه لكي تكون نتيجة cos في النطاق [1,0] يجب أن تكون X في النطاق [0,pi/2] وليس [0,1]، آسف على الخطأ الأولي.

وربما كنت تبحث عن شيء مثل متعدد الحدود الاستيفاء . يجب A الدرجة الثانية / مكعب / الدرجة الرابعة الاستيفاء لتعطيك أنواع من المنحنيات التي تظهر في السؤال. ربما يمكن أن يتحقق الاختلافات بين منحنيات الثلاث التي تظهر فقط عن طريق ضبط معاملات (التي تحدد بشكل غير مباشر عورة).

والرسم البياني للy = x^p لx 0-1 سوف تفعل ما تريد كما كنت تختلف p من 1 (والذي سيعطي خط أحمر) صعودا. كما p يزيد سيتم منحنى "دفعت في" أكثر وأكثر. p ليس من الضروري أن يكون صحيحا.

و(سيكون لديك لتوسيع نطاق الحصول على 0-100 ولكن أنا متأكد من أنك يمكن أن تعمل أنه من أصل)

واصوت لفكرة عامة راكس Olgud، ومع تعديل واحد:

y = alpha * x + (1-alpha)*(f(x/100)*100)

نص بديل http://www4c.wolframalpha.com / حساب / MSP / MSP4501967d41e1aga1b3i00004bdeci2b6be2a59b؟ MSPStoreType = صورة / gif و ق = 6

وحيث f (0) = 0، و (1) = 1، و (خ) هو superlinear، ولكن أنا لا أعرف من أين جاءت هذه الفكرة "ربع دائرة" أو لماذا من 1-جتا (س) ستكون خيار جيد.

وأنا أقترح و (س) = س <سوب> ك حيث ك = 2، 3، 4، 5، أيا كان يعطيك degre المطلوب من شدة الانحدار لوألفا = 0. بيك قيمة ك كرقم ثابت، ثم تختلف α لاختيار منحنى معينة.

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

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

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