Class: ColorNamerRuby::Distance
- Inherits:
-
Object
- Object
- ColorNamerRuby::Distance
- Defined in:
- lib/color_namer_ruby/distance.rb
Class Method Summary collapse
- .distance_between_colours(comparison_colour) ⇒ Object
- .get_colour_distances_in_list(colour_list) ⇒ Object
- .get_names_from_hex(hex, pick, omit, limit) ⇒ Object
Class Method Details
.distance_between_colours(comparison_colour) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/color_namer_ruby/distance.rb', line 35 def self.distance_between_colours(comparison_colour) # https://en.wikipedia.org/wiki/Euclidean_distance#Higher_dimensions # closest colours across the different arrays # TODO use LAB or HCL instead of HSL conversion_1 = @colour.hsl conversion_2 = comparison_colour.hsl Math.sqrt((conversion_1[:h] - conversion_2[:h])**2 + (conversion_1[:s] - conversion_2[:s])**2 + (conversion_1[:l] - conversion_2[:l])**2) end |
.get_colour_distances_in_list(colour_list) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/color_namer_ruby/distance.rb', line 27 def self.get_colour_distances_in_list(colour_list) colour_list.map do |swatch| swatch[:distance] = self.distance_between_colours(ColorConversion::Color.new(swatch.dig(:hex))) end colour_list end |
.get_names_from_hex(hex, pick, omit, limit) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/color_namer_ruby/distance.rb', line 9 def self.get_names_from_hex(hex, pick, omit, limit) @colour = ColorConversion::Color.new(hex) colour_lists = [] ColorNamerRuby.list_collections.each do |collection_name| next unless (pick.empty? || pick.include?(collection_name)) && !omit.include?(collection_name) colour_lists += self.get_colour_distances_in_list(Object.const_get("ColorSwatchCollection::#{collection_name.classify}").colours) end colour_lists = colour_lists.flatten.compact.reject(&:empty?) limit = colour_lists.length if limit.negative? colour_lists.sort_by { |swatch| swatch[:distance] }.take(limit) end |