Skip to content

Instantly share code, notes, and snippets.

@mudge
Last active March 31, 2016 14:39
Show Gist options
  • Save mudge/db6fad6f3c53e3bffff58873800d4ed3 to your computer and use it in GitHub Desktop.
Save mudge/db6fad6f3c53e3bffff58873800d4ed3 to your computer and use it in GitHub Desktop.
A class to convert red, green, blue values into HSL
class Colour
attr_reader :red, :green, :blue
def initialize(red, green, blue)
@red = Float(red)
@green = Float(green)
@blue = Float(blue)
end
def to_hsl
[hue, saturation, lightness]
end
def hue
(60 * Math::PI / 180) * hue_prime
end
def saturation
if delta.zero?
0
else
delta / (1 - ((2 * lightness) - 1)).abs
end
end
def lightness
(c_max + c_min) / 2.0
end
private
def hue_prime
if delta.zero?
0
elsif c_max == red_prime
((green_prime - blue_prime) / delta) % 6
elsif c_max == green_prime
((blue_prime - red_prime) / delta) + 2
elsif c_max == blue_prime
((red_prime - green_prime) / delta) + 4
end
end
def delta
c_max - c_min
end
def c_max
[red_prime, green_prime, blue_prime].max
end
def c_min
[red_prime, green_prime, blue_prime].min
end
def red_prime
red / 255.0
end
def green_prime
green / 255.0
end
def blue_prime
blue / 255.0
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment