def to_rgb(ignored = nil)
return Color::RGB.new if Color.near_zero_or_less?(@l)
return Color::RGB.new(0xff, 0xff, 0xff) if Color.near_one_or_more?(@l)
return Color::RGB.from_fraction(@l, @l, @l) if Color.near_zero?(@s)
if Color.near_zero_or_less?(@l - 0.5)
tmp2 = @l * (1.0 + @s.to_f)
else
tmp2 = @l + @s - (@l * @s.to_f)
end
tmp1 = 2.0 * @l - tmp2
tmp3 = [ @h + (1.0 / 3.0), @h, @h - (1.0 / 3.0) ]
rgb = tmp3.map { |hue|
hue += 1.0 if Color.near_zero_or_less?(hue)
hue -= 1.0 if Color.near_one_or_more?(hue)
if Color.near_zero_or_less?((6.0 * hue) - 1.0)
tmp1 + ((tmp2 - tmp1) * hue * 6.0)
elsif Color.near_zero_or_less?((2.0 * hue) - 1.0)
tmp2
elsif Color.near_zero_or_less?((3.0 * hue) - 2.0)
tmp1 + (tmp2 - tmp1) * ((2 / 3.0) - hue) * 6.0
else
tmp1
end
}
Color::RGB.from_fraction(*rgb)
end