سؤال

هدفي من هذه الخوارزمية التي أعمل عليها هو إخراج تدرج لوني من بعض الألوان المتوفرة.أعني بتقدم اللون إنشاء تأثير "التلاشي" بين لونين (اللون A، اللون B) وتخزين كل قيمة لون ((R,G,B) صف) بينهما.

على سبيل المثال، إذا كان ما يتم توفيره هو اللون الأسود الكلي A = (0,0,0) والأبيض الكلي B = (255,255,255) التقدم الناتج سيكون:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

بحيث نحصل على اللون الأبيض في البداية ويتحول تدريجياً إلى اللون الأسود.إنه بالطبع سهل للغاية مع الأبيض والأسود (فقط قم بزيادة RGB بمقدار واحد في كل خطوة لمدة 255 مرة).ولكن ماذا لو أردت القيام بهذا الإجراء بلونين عشوائيين، مثل A = (180,69,1) وB = (233,153,0)؟؟

ملاحظة مهمة:إذا كان من الأسهل تحقيق ذلك باستخدام النظام السداسي العشري (أو أي نوع آخر من تدوين الألوان)، فيمكنني العمل معه أيضًا، فقط حدد النوع (ضع في الاعتبار أنني أعمل على PIL (مكتبة تصوير Python)، لذلك إذا إنه متوافق مع أنني بخير)

من الواضح أنه يجب أن يكون التوزيع متساويًا قدر الإمكان، ويجب أن يكون التقدم متجانسًا.

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

شكرا لك مقدما.

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

المحلول

قم بتحويل إحداثيات RGB الخاصة بك إلى HSL أو HSV وانتقل عبرها، ثم قم بالتحويل مرة أخرى إلى RGB على طول الطريق.

نصائح أخرى

أود فقط استيفاء قيم RGB بشكل مستقل.انظر الى هذا خيط.

أوصي بنفس سؤال جيم كلاي ولكن اقرأ منه الأعلى.أو راجع ويكيبيديا بخصوص إقحام.

إجابتي على سؤال SO بعنوان نطاق القيم إلى اللون الزائف قد يكون مفيدًا لك لأنه يعرض طريقة واحدة لإنشاء تدرج لوني محدد (الاسم الشائع لما أشرت إليه بتقدم اللون).

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

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

أعتقد أن هذا ما يقولهJim Clay أيضًا في إجابته.إذا كنت تريد بعض نماذج التعليمات البرمجية، فاذكر ذلك في تعليق.

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