Sha256: 97f74b432c2be94baf2287240e3901c81bf56adfd4b7de2bfa94bd9f9d7c5d7a

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module Photomosaic
  module Color
    class RGB
      attr_reader :red, :green, :blue

      def initialize(red, green, blue)
        @red = red
        @green = green
        @blue = blue
      end

      def max
        @max ||= [@red, @green, @blue].max
      end

      def min
        @min ||= [@red, @green, @blue].min
      end

      def to_hsv
        HSV.new(hue, saturation, value)
      end

      def calculate_distance(rgb)
        Math.sqrt(squares_array(rgb).inject(&:+))
      end

      private

      def hue
        return 0 if max == min

        _hue = case max
               when @red
                 ((@green - @blue).to_f / (max - min)) % 6
               when @green
                 (@blue - @red).to_f / (max - min) + 2
               else
                 (@red - @green).to_f / (max - min) + 4
               end

        (_hue * 60).to_i
      end

      def saturation
        max == 0 ? 0 : (max - min).to_f / max * 100
      end

      def squares_array(rgb)
        [
         (self.red - rgb.red)**2,
         (self.green - rgb.green)**2,
         (self.blue - rgb.blue)**2
        ]
      end

      def value
        (max * 100).to_f / 256
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
photomosaic-0.0.1 lib/photomosaic/color/rgb.rb