Last active
March 31, 2016 14:39
-
-
Save mudge/db6fad6f3c53e3bffff58873800d4ed3 to your computer and use it in GitHub Desktop.
A class to convert red, green, blue values into HSL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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