所以我正在尝试为HSL写一个转换器到RGB(并最终转换成十六进制) 我正在关注这个colorspace conversion theory,我似乎陷入了第6步
现在我们需要做最多3次测试,为每种测试选择正确的公式 色彩通道。让我们从红色开始。
测试1 - 如果6 x temporary_R小于1,则Red = temporary_2 + (temporary_1 - temporary_2)x 6 x temporary_R如果是第一个 测试大于1检查以下
测试2 - 如果2 x temporary_R小于1,则Red = temporary_1 In 第二次测试的情况也大于1,请执行以下操作
测试3 - 如果3 x temporary_R小于2,则Red = temporary_2 + (temporary_1 - temporary_2)x(0.666 - temporary_R)x 6在这种情况下 第三个测试也大于2,你做了以下
红色=临时_2
好吧,让我们为我们的红色值
6 x temporary_R = 6 x 0.869 = 5.214,所以它大于1,我们需要 做测试2 2 x temporary_R = 2 x 0.869 = 1.738,它也大于 1,我们需要做测试3 3 x temporary_R = 3 x 0.869 = 2.607,这是 大于2,所以我们选择最后一个公式Red = temporary_2 = 向下舍入的0.0924是0.09,这是我们从RGB到HSL转换识别的数字
到目前为止,我已经修补了一个函数来获取我的HSL颜色
def toRGB(hue, sat, lum)
temp_1 =
case lum
when lum < 0.0
lum x (1.0 * sat)
when lum > 0.0
(lum + sat) - lum
end
temp_2 = (2 * lum) - temp_1.to_f
h = (hue/360.0).round(4)
temp_r = (h + 0.333).round(4)
temp_r = temp_r + 1 if temp_r < 0
temp_r = temp_r - 1 if temp_r > 1
temp_g = h
temp_b = (h - 0.333).round(4)
temp_b = temp_b + 1 if temp_b < 0
temp_b = temp_b - 1 if temp_b > 1
red =
#test 1
#test 2
#test 3
"#{red}"
end
我试图使用case
声明
red =
case temp_r
when 6 * temp_r < 1
temp_2 + (temp_1 - temp_2) * 6 * temp_r
when 2 * temp_r < 1
temp_1
when 3 * temp_r < 2
temp_2 + (temp_1 - temp_2) * (0.666 - temp_r * 6)
end
然后我开始重新阅读说明书,现在我无法真正看到在ruby中做我需要的方法。也许我过度思考了。
如果您想在上下文中查看我的其余代码can see it here
答案 0 :(得分:0)
我在代码段中注意到两件事:
您正在ruby中混合使用两种类型的switch case语句。
case a
when 1..5
"It's between 1 and 5"
when 6
"It's 6"
end
case
when a > 1 && a < 5
"It's between 1 and 5"
when a == 6
"It's 6"
end
查看差异,在第一种情况下,当您直接比较案例时,您需要提及您要比较的变量名称,而在第二种情况下,您要与真实&amp;进行比较。错误的条件,明确地在你的变量上加上条件,这样你就不需要把它放在案例旁边。
第二件事是根据您的条件陈述,您在案件陈述中需要一个其他案例。
red =
case
when 6 * temp_r < 1
temp_2 + (temp_1 - temp_2) * 6 * temp_r
when 2 * temp_r < 1
temp_1
when 3 * temp_r < 2
temp_2 + (temp_1 - temp_2) * (0.666 - temp_r * 6)
else
temp_2
end