आप तरंग दैर्ध्य द्वारा हेक्स कोड को सॉर्ट करना चाहते हैं, यह मोटे तौर पर ह्यू-वैल्यू पर मैप करता है। एक हेक्सकोड को छह वर्ण स्ट्रिंग के रूप में दिया गया है:RRGGBB
।
आपको बस एक फ़ंक्शन बनाने की ज़रूरत है जो एक हेक्सकोड स्ट्रिंग लेता है और ह्यू मान को आउटपुट करता है, यहाँ सूत्र है इस Math.SO उत्तर से :
आर' =आर/255
जी' =जी/255
बी' =बी/255
सीमैक्स =अधिकतम (आर', जी', बी')
सीमिन =मिनट (आर', जी', बी')
=सीमैक्स - सीमिन
मैं देखना चाहता था कि क्या यह काम करेगा, इसलिए मैंने रूबी में एक नमूना कार्यक्रम तैयार किया, यह आरजीबी-स्पेस से समान रूप से 200 यादृच्छिक रंगों का नमूना लेता है, और उन्हें क्रमबद्ध करता है, आउटपुट इंद्रधनुष जैसा दिखता है!
यहाँ रूबी स्रोत है:
require 'paint'
def hex_to_rgb(hex)
/(?<r>..)(?<g>..)(?<b>..)/ =~ hex
[r,g,b].map {|cs| cs.to_i(16) }
end
def rgb_to_hue(r,g,b)
# normalize r, g and b
r_ = r / 255.0
g_ = g / 255.0
b_ = b / 255.0
c_min = [r_,g_,b_].min
c_max = [r_,g_,b_].max
delta = (c_max - c_min).to_f
# compute hue
hue = 60 * ((g_ - b_)/delta % 6) if c_max == r_
hue = 60 * ((b_ - r_)/delta + 2) if c_max == g_
hue = 60 * ((r_ - g_)/delta + 4) if c_max == b_
return hue
end
# sample uniformly at random from RGB space
colors = 200.times.map { (0..255).to_a.sample(3).map { |i| i.to_s(16).rjust(2, '0')}.join }
# sort by hue
colors.sort_by { |color| rgb_to_hue(*hex_to_rgb(color)) }.each do |color|
puts Paint[color, color]
end
ध्यान दें, सुनिश्चित करें कि gem install paint
रंगीन टेक्स्ट आउटपुट प्राप्त करने के लिए।
यह रहा आउटपुट:
इसे SQL उपयोगकर्ता-परिभाषित फ़ंक्शन और ORDER BY RGB_to_HUE(hex_color_code) के रूप में लिखना अपेक्षाकृत सीधा होना चाहिए, हालाँकि, मेरा SQL ज्ञान बहुत बुनियादी है।
संपादित करें:मैंने यह प्रश्न dba.SE पर पोस्ट किया है रूबी को SQL उपयोगकर्ता परिभाषित फ़ंक्शन में बदलने के बारे में।