سؤال

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

الآن يمكنني فقط استخدام RAND () لتوليد قيم RGB ونأمل أن تكون كلها مختلفة، لكنني أظن أنني لن أحصل على توزيع جيد في مساحة RGB. هل هناك طريقة أفضل من هذا؟ على سبيل المثال، طريقة جيدة للركوب الدراجات من خلال ألوان مختلفة قبل أن تكررها (تقريبا)؟

لا تضطر الألوان إلى التطابق مع أي بيانات في العناصر. أريد فقط أن أكون قادرا على النظر إلى العديد من القيم وأرى أنها مختلفة، لأنها مجاورة.

يمكنني معرفة شيء ما لكنني أعتقد أن هذا سؤال مثير للاهتمام. :)

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

المحلول

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

أقترح عليك HSV أو HSL. نموذج اللون بدلا من ذلك، لا سيما تريد تغيير مسحة.

إذا كنت تريد X قيم ألوان مختلفة، فغيرها من 0 إلى 360 مع حجم خطوة 360 مقسوما على X.

نصائح أخرى

بشكل عام RGB ليس مساحة ألوان رائعة للقيام بهذه الأنواع من الأشياء لأنها غير خطية للغاية، بالنسبة للمبتدئين. هذا يعني أن مسافات متساوية تحركت بين ثلاثة أضعاف Triplets لا تبدو مختلفة بنفس القدر بأعيننا.

ربما كنت أعمل في L * C * H * الفضاء (أنظر أيضا) الفضاء، أو HSL. الفضاء، وتولد فقط تباعد موحدة في هوى. تم تصميم هذه المساحات لتكون خطيا تقريرا تقريبا.

ما هي مساحة عينتك ... كم عدد العناصر التي نتحدث بها.

يمكنك بناء مجموعة من ثلاث مرات RGB من

for(int r = 0; r < 255; r = r+16)
   for(int g = 0; g < 255; g = g+16)
      for(int b = 0; b < 255; b = b+16)
           // take r, g, b and add it to a list

ثم عشوائي قائمتك وتكرر من خلاله. التي تعطيك 16 ^ 3 (4096) ألوان مختلفة قبل اللون المتكرر.

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

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

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

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

نظرية أربعة ألوان

إذا كنت بحاجة فقط إلى مجموعة من الألوان المميزة للغاية (وليس خوارزمية لتوليدها)، فقد أنشأت أداة مجانية على موقع الويب الخاص بي الذي يفعل ذلك:
http://phrogz.net/css/distinct-colors.html

بدلا من استخدام حتى الاستفادة حتى في مساحة RGB أو HSV (التي لا توزع بشكل موحد فيما يتعلق بالتصور البشري) تتيح لك الأداة إنشاء شبكة من القيم في مساحة HSV، ثم يستخدم CMC (I: ج) معيار لمسافة اللون لرمي الألوان التي هي قريب جدا من بعضها البعض. (يتيح لك شريط التمرير "العتبة" في علامة التبويب الثانية التحكم في كيفية تمييز الألوان بصريا، والتي تبين لك النتائج في الوقت الفعلي.)

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

اعتبارا من هذه الكتابة تعمل الأداة بشكل جيد مع Chrome و Safari و (عبر Shim) Firefox؛ لا يدعم IE9 مراجعات إدخال مجموعة HTML5، والتي يستخدمها UI على نطاق واسع للاستكشاف التفاعلي.

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