Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
4年前关闭。
使用javascript,我创建了一个1000px x 1000px的画布,在“播放”时会用随机大小,随机彩色的矩形填充自身。有趣,但效果扎眼。
为了进一步完善它,我希望它锁定一种可能由其第一次迭代确定的调色板,然后在整个播放过程中保持宽松状态。我当时正在考虑让它做出“偶然的”奇数球选择,但前提是矩形很小,即微小的强调色。但是我以后可以自己弄清楚。
我在这里找到了一个非常有意思的生成器,它很有趣,但是作者用Java编写了它。不幸的是,我仍然不是javascript(!)的菜鸟。有人可以教我如何翻译它吗?
欢迎提出其他建议。如果我能确定应该在哪里发布脚本,我将很乐意分享。毫无疑问,有很多关于改善我的代码的建议...
这是我指的发电机:
Algorithm to randomly generate an aesthetically-pleasing color palette
提前谢谢了!
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
4年前关闭。
使用javascript,我创建了一个1000px x 1000px的画布,在“播放”时会用随机大小,随机彩色的矩形填充自身。有趣,但效果扎眼。
为了进一步完善它,我希望它锁定一种可能由其第一次迭代确定的调色板,然后在整个播放过程中保持宽松状态。我当时正在考虑让它做出“偶然的”奇数球选择,但前提是矩形很小,即微小的强调色。但是我以后可以自己弄清楚。
我在这里找到了一个非常有意思的生成器,它很有趣,但是作者用Java编写了它。不幸的是,我仍然不是javascript(!)的菜鸟。有人可以教我如何翻译它吗?
欢迎提出其他建议。如果我能确定应该在哪里发布脚本,我将很乐意分享。毫无疑问,有很多关于改善我的代码的建议...
这是我指的发电机:
Algorithm to randomly generate an aesthetically-pleasing color palette
提前谢谢了!
最佳答案
我喜欢第二个答案的article中的功能。
在JS中,使用s = 0.5和v = 0.95:
function randomColor(){
var golden_ratio_conjugate = 0.618033988749895,
h = (Math.random() + golden_ratio_conjugate) % 1 *360,
rgb = hsvToRgb(h, 50, 95);
return "rgb("+rgb[0]+","+rgb[1]+","+rgb[2]+")";
}
/**
* Converts an HSV color value to RGB. Conversion formula
* adapted from http://en.wikipedia.org/wiki/HSL_and_HSV.
* Assumes h is contained in the set [0, 360] and
* s and l are contained in the set [0, 100] and
* returns r, g, and b in the set [0, 255].
*
* @param Number h The hue
* @param Number s The saturation
* @param Number v The value
* @return Array The RGB representation
*/
function hsvToRgb(h, s, v){
var chroma = s * v / 10000,
min = v / 100 - chroma,
hdash = h / 60,
x = chroma * (1 - Math.abs(hdash % 2 - 1)),
r = 0, g = 0, b = 0;
switch(true){
case hdash < 1:
r = chroma;
g = x;
break;
case hdash < 2:
r = x;
g = chroma;
break;
case hdash < 3:
g = chroma;
b = x;
break;
case hdash < 4:
g = x;
b = chroma;
break;
case hdash < 5:
r = x;
b = chroma;
break;
case hdash <= 6:
r = chroma;
b = x;
break;
}
r += min;
g += min;
b += min;
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}
09-11 15:27