سؤال

دعونا نفكر في السيناريو التالي:وظيفة يمكنها توليد ألوان التعليمات البرمجية من الأبيض إلى الأحمر، ومن الأبيض إلى الأزرق، ومن الأبيض إلى الوردي، ومن الأبيض إلى البرتقالي، وما إلى ذلك.

رمز الألوان بتنسيق RGB بقيم من 0 إلى 255.

أيه أفكار؟هل يمكن أن تعطيني الكود الكاذب أو الرابط لهذه الخوارزمية؟

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

المحلول

وهذا يبدو وكأنه كنت بعد الاستيفاء الخطي - في قضيتك، التحريف من الأبيض إلى اللون المحدد. على سبيل المثال، في C #:

public IEnumerable<Color> Interpolate(Color from, Color to, int steps)
{
    int range = steps-1; // Makes things a bit easier
    for (int i=0; i < steps; i++)
    {
        // i is the proportion of the "to" colour to use.
        // j is the proportion of the "from" colour to use.

        int j = range - i;
        int r = ((from.R * j) + (to.R * i)) / range;
        int g = ((from.G * j) + (to.G * i)) / range;
        int b = ((from.B * j) + (to.B * i)) / range;
        yield return new Color(r, g, b);
    }
}

وبالطبع هناك طرق أخرى للقيام بذلك، إضافة إلى الخطية، ولكن هذا من المرجح أن يكون أبسط. لاحظ أن هذا يحصل صعبة إذا كان لديك الكثير من الخطوات أو القيم الكبيرة، لأنك بحاجة إلى النظر في إمكانية تجاوز. في هذه الحالة يجب أن تكون بخير على الرغم - كنت من غير المحتمل أن تريد أكثر من 256 الخطوات، والقيمة القصوى هي 255، لذلك لن تحصل على مقربة من حدود ints

وتحرير: كما لوحظ في التعليقات، RGB قد جيدا لا يكون أفضل المجال الذي لاستخدام الخطية. قد تكون أفضل حالا تحويل من / إلى قيم RGB إلى HSL أو HSV ، والقيام الاستيفاء على أولئك. وهذا قد يكون سهلا أو صعبا بالاعتماد على النظام الأساسي الخاص بك. وصلة ويكيبيديا في الجملة السابقة يعطي صيغ لحسابات المناسبة لو لم تكن قدمت لك.

نصائح أخرى

الخوارزمية:

  1. ابحث عن قيمة RGB للون الأبيض
  2. ابحث عن قيمة RGB للون الآخر (على سبيل المثال ذكرت الأحمر والأزرق والوردي والبرتقالي)
  3. احسب قيم RGB التي تكون مكونات RGB الخاصة بها حسابيًا بين مكونات RGB ذات طرفين

على سبيل المثال، إذا كان أحد الطرفين هو (0,0,0) والآخر هو (0,255,255) فإن القيمة في المنتصف بين هذين اللونين هي (0,128,128)...والقيمة التي تمثل ربع المسافة بين هاتين القيمتين هي (0,64,64).

وكثيرا ما يستخدم التحريف الألوان من خلال نقاط محددة معروفة لبناء أنظمة الألوان للالرسوم البيانية البيانات. بديلا لصيغة الاستيفاء صريحة هو اختيار نظام الألوان التي لديها بعض تصميم وراء تمثيلها. مصدر جيد لمثل هذا المخطط هو ColorBrewer .

وحتى إذا كنت بحاجة إلى أقحم، بدءا من نظام الألوان مصممة تصميما جيدا يمكن أن تؤدي إلى نتائج أكثر قابلة للاستخدام من ذلك بكثير.

وابدأ مع اثنين من الألوان التي تريدها التدرجات بين، وتقسيمها في R، G وأجزاء B.

وتحديد عدد "الخطوات" التي تريد تتلاشى كليا.

وتقسيم الفرق بين R، G و B أجزاء مع عدد من الخطوات. لديك الآن "الاختلاف خطوة" لكل لون.

وحلقة من خلال كل خطوة وإضافة الفرق خطوة لقيمة اللون مرة واحدة لكل التكرار. جولة إلى أعداد صحيحة و<م> آخر شيء تفعله.

ما هي الألوان التي تريد تغيير؟ سوف الأبيض إلى اللون الأحمر يكون مجرد حالة بدءا من 255 255 255 وdecrementing ثاني اثنين حتى يكون لديك 255 شأنه 0 0. الأزرق أن يكون الحفاظ على القيمة الأخيرة وdecrementing في نهاية المطاف مع 0 0 255، الخ

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