2010-06-02 16 views
5

यहां हमारे पास एक दिलचस्प वास्तविक-दुनिया एल्गोरिदम आवश्यकता है जिसमें रंग शामिल हैं।स्थिर यादृच्छिक रंग एल्गोरिदम

  1. Nसुंदर रंग: आदेश में एक सुंदर चार्ट आकर्षित करने के लिए में हैं (यानी: पाई चार्ट) हम N रंग रहे हैं "काफी अलग" के एक यादृच्छिक सेट लेने और एक साथ अच्छे लग रहे हैं की जरूरत है। यह चमक और संतृप्ति को ठीक करके और 360/N के चरणों में रंग के माध्यम से कदम उठाकर पूरा किया जा सकता है।
  2. स्थिर रंग असाइनमेंट: दिए गए क्षेत्रों के साथ Pie_1 दिया गया ('ए', 'बी', 'सी') और Pie_2 लेबल वाले क्षेत्रों ('बी', 'सी', 'डी') के साथ, यह अच्छा होगा यदि क्षेत्र बी और सी दोनों का रंग Pie_1 और Pie_2 दोनों पर समान है। अगर क्षेत्र को हटाया जाता है या समय के साथ चार्ट में जोड़ा जाता है तो यह भ्रम को रोकने में मदद करेगा। लेबल एकमात्र स्थिर चीज है।
  3. हार्ड-कोडित रंगों की अनुमति देता है: एल्गोरिदम को हार्डकोड किए गए लेबल-> रंग संबंधों को इनपुट के रूप में अनुमति देना चाहिए, लेकिन बाकी लेबलों के लिए रंगों (नियम 1 और 2 के अनुसार) की गणना करना चाहिए।

मुझे लगता है कि यह एल्गोरिदम, भले ही यह काफी अनुकूल दिखता है, एक से अधिक स्थितियों में उपयोगी होगा।

कोई विचार?

अद्यतन: एरिक सही है कि प्रत्येक लेबल के रंगों की स्थिरता की गारंटी देना असंभव है क्योंकि नए लेबल प्रकट होते हैं और गायब हो जाते हैं। लेकिन मुझे खुशी है कि यह "पर्याप्त स्थिर" है, यानी रंग परिवर्तन कम हो जाते हैं।

मैं की तरह कुछ के बारे में सोच रहा था:

  1. हर लेबल हैश का उपयोग कर एक यादृच्छिक रंग मूल्य हो जाता है (लेबल)% 360
  2. आदेश गारंटी नहीं है कि उत्पन्न रंग काफी अलग हैं में, हम रंग विभाजित एक निश्चित मात्रा में चक्र (यानी: 2*N) और पिछले ह्यू मानों को नए विभेदित लोगों को 'गोल' करने का प्रयास करें।
  3. एक ही गोलाकार रंग मूल्य पर जाने वाले विभिन्न लेबलों के मामले में, हम किसी भी तरह टाई तोड़ते हैं और कहीं और बिंदु को स्थानांतरित करते हैं।

लेकिन यह हार्ड-कोड वाले रंगों के मुद्दे को छोड़ देता है।

उत्तर

4

आप color wheel एल्गोरिदम का उपयोग कर एक साथ अच्छे दिखने वाले यादृच्छिक रंगों का एक सेट चुन सकते हैं। यहां कार्यान्वयन मार्गदर्शिकाओं के साथ related SO question है, या कई अन्य लोगों के लिए Google है।

स्थिरता सुनिश्चित करने के लिए आप रंगीन पहिया पर शुरुआती बिंदु के रूप में अपने लेबल के हैश की तरह कुछ उपयोग कर सकते हैं। यह भी संतुष्ट करता है 3. यदि आपके पास यह बताने के लिए एक ओवरराइड तंत्र है कि एक विशिष्ट लेबल हैश मान रंगीन पहिया पर एक विशिष्ट प्रारंभिक बिंदु से मेल खाना चाहिए।

संपादित करें:

रंग चक्र आप एक मास्टर प्रारंभिक बिंदु लेने की सुविधा देता है (उदाहरण के लिए (हैश (ए)% 360) और सुनिश्चित करें कि दो अन्य रंग (बी, सी) "अच्छा" जब एक के साथ एक साथ इस्तेमाल किया जाता है बी और सी ए द्वारा निर्धारित किए जाते हैं। यदि आप बाद में पाई चार्ट (बी, वाई, जेड) प्राप्त कर सकते हैं, बी को (हैश (बी)% 360 के रूप में सेट किया जाएगा) और यह उससे अलग होगा (ए, बी, सी) मामला।

यदि आप मनमाने ढंग से पाई चार्ट पर लेबल मिश्रण कर सकते हैं, तो कोई एल्गोरिदम यह सुनिश्चित नहीं कर सकता कि वे हमेशा एक साथ अच्छे दिखेंगे। यहां एक साधारण सबूत है:

ए, बी, सी को चुना जाना चाहिए ताकि वे एक साथ अच्छे लग सकें।

अब आप निश्चित रूप से जेड ऐसी है कि एक और जेड संघर्ष के लिए कुछ रंग चुन सकते हैं एक एक मनमाना रंग जेड

के साथ दिखाई देते हैं।

आप केवल गारंटी दे सकते हैं कि रंगों का एक निश्चित सेट एक साथ अच्छा लगेगा, और उसी सेट को चुनने से वही रंग पुन: उत्पन्न हो जाएंगे।

आप उदाहरण के हैश का उपयोग कर सकते हैं पहिया (हैश (ए)) पर शुरुआती बिंदु के रूप में पहला लेबल या आप हैश (हैश (ए) + 31 * हैश (बी) + 31 * 31 * हैश (सी) को जोड़ सकते हैं। 31 (एक प्राइम नंबर) से गुणा करना जावा दुनिया से कुछ है जो एकाधिक हैंश के संयोजन के दौरान बेहतर गणितीय वितरण सुनिश्चित करने में मदद करता है।

+0

यदि हम रंग (लेबल) परिभाषित करते हैं: = एचएसबी (हैश (लेबल)% 360, एस, बी) काम करेगा लेकिन आप कैसे गारंटी देते हैं कि रंग अलग-अलग है। दूसरी ओर, यदि आप एक रंगीन पहिया का उपयोग करते हैं, तो कौन सा लेबल धोया जाता है और रंगीन पहिया शुरू होता है और चुड़ैल लेबल केवल अनुयायियों हैं? आपके उत्तर के लिए धन्यवाद – Olmo

+0

@ ओल्मो: मेरा संपादन देखें। –

+0

बहुत एरिक थक जाता है। मैंने प्रश्न को समुदाय विकी में बदल दिया है, इसलिए मैं थोड़ा और अधिक जगह के साथ उत्तर दे सकता हूं – Olmo

संबंधित मुद्दे