我拥有它,以便当圆圈完成时,正在绘制的圆将慢慢地穿过彩虹。前两个很好地工作。在那之后,它停止缓慢变化,只是捕捉到一个阴影,直到下一个阴影。你能告诉我我做错了什么吗?这可能是非常明显的事情:C
function setcolor() {
if (degrees <= 60) {
var g = Math.floor(255 * (degrees/60));
color = "rgb(255, "+ g +", 0)";
}
else if (degrees <= 120) {
var r = Math.floor(255 / (degrees/60));
color = "rgb("+ r +", 255, 0)";
}
else if (degrees <= 180) {
var b = Math.floor(255 * (degrees/60));
color = "rgb(0, 255, "+ b +")";
}
else if (degrees <= 240) {
(g = Math.floor(255 /(degrees/60)));
color = "rgb(0, "+ g +", 255)";
}
else if (degrees <= 300) {
(r = Math.floor(255 * (degrees/60)));
color = "rgb("+ r +", 0, 255)";
}
else if (degrees <= 360) {
(g = Math.floor(255 / (degrees/60)));
color = "rgb(255, "+ g +", 0)";
}
}
答案 0 :(得分:1)
让我们来看看你的最后一个街区。它被称为else
到degrees <= 300
,因此我们知道至少degrees
将为301.为了便于计算,我们只需将其称为300.
g = Math.floor(255 / (degrees / 60));
这导致255 / (300 / 60) = 255 / 5 = 51
- 这不是你所期望的,因为平滑过渡应该从255变为0(或0到255)。
之所以这样,是因为您的degrees / 60
应该从0
过渡到1
,这只是在第一步中才会发生。请尝试(degrees - 300) / 60
,因为这符合范围。
您还会注意到,对于平滑转换,您要使用255 * (1-(degrees-300)/60)
然而,当你能做到这一点时,所有这一切都没有实际意义:
color = "hsl("+degrees+"deg, 100%, 50%)";