to_hsl (Color::RGB)

    # File lib/color/rgb.rb, line 199
      def to_hsl
        min   = [ @r, @g, @b ].min
        max   = [ @r, @g, @b ].max
        delta = (max - min).to_f

        lum   = (max + min) / 2.0

        if Color.near_zero?(delta) # close to 0.0, so it's a grey
          hue = 0
          sat = 0
        else
          if Color.near_zero_or_less?(lum - 0.5)
            sat = delta / (max + min).to_f
          else
            sat = delta / (2 - max - min).to_f
          end

          # This is based on the conversion algorithm from
          # http://en.wikipedia.org/wiki/HSV_color_space#Conversion_from_RGB_to_HSL_or_HSV
          # Contributed by Adam Johnson
          sixth = 1 / 6.0
          if @r == max # Color.near_zero_or_less?(@r - max)
            hue = (sixth * ((@g - @b) / delta))
            hue += 1.0 if @g < @b
          elsif @g == max # Color.near_zero_or_less(@g - max)
            hue = (sixth * ((@b - @r) / delta)) + (1.0 / 3.0)
          elsif @b == max # Color.near_zero_or_less?(@b - max)
            hue = (sixth * ((@r - @g) / delta)) + (2.0 / 3.0)
          end

          hue += 1 if hue < 0
          hue -= 1 if hue > 1
        end
        Color::HSL.from_fraction(hue, sat, lum)
      end