令人愉悦的调色板随机颜色生成
pleasing palette random color generation
使用 javascript,我创建了一个 1000px x 1000px canvas,它在 "play" 上填充了随机大小、随机颜色的矩形。有趣但花哨的结果。
为了进一步完善它,我希望它锁定某种可能由其第一次迭代确定的调色板,然后在整个游戏中保持宽松。然后我想让它做出 "serendipitous" 奇数球选择,但前提是矩形很小,即很小的强调色。但我稍后可以自己解决这个问题。
我在这里找到了一个高投票的生成器,很有趣,但是作者在 Java 中写了它。不幸的是,我仍然是 javascript(!) 的菜鸟。有人可以告诉我如何翻译吗?
欢迎提供替代建议。如果我能弄清楚应该在哪里发布它,我很乐意分享我的脚本。毫无疑问会有很多关于改进我的代码的建议......
这是我指的发电机:
Algorithm to randomly generate an aesthetically-pleasing color palette
非常感谢!
看起来像这样:
function redColor(var red) {
return (Math.floor(Math.random() * 256) + red) / 2;
}
为红色、绿色和蓝色制作三个。然后,您可以使用 DOM 将 HTML 元素的背景设置为结果。或者,如果您只想提供颜色值,则可以将它们绑在一起。你必须将它们作为 3 个单独的变量,因为我不知道颜色对象。
在 JavaScript 中设置背景:
element.style.backgroundColor = rgb(redColor(greenColorToMix), greenColor(redColorToMix), blueColor(blueColorToMix));
尽可能阅读 Java 代码和随附的注释。
写下 'program' 更高级的伪代码。像 "mix each random colour with the mix-in colour" 这样的语句。将每个伪代码语句分解成几个更详细的伪代码片段。
将伪代码翻译成Java脚本。
注意:链接代码不会生成令人愉悦的和谐色彩组合。它生成随机组合,并通过与颜色混合(建议使用白色作为柔和色)来减少 不和谐。
阅读色彩和谐理论并想出更好的东西。
我喜欢第二个答案中 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)];
}
使用 javascript,我创建了一个 1000px x 1000px canvas,它在 "play" 上填充了随机大小、随机颜色的矩形。有趣但花哨的结果。 为了进一步完善它,我希望它锁定某种可能由其第一次迭代确定的调色板,然后在整个游戏中保持宽松。然后我想让它做出 "serendipitous" 奇数球选择,但前提是矩形很小,即很小的强调色。但我稍后可以自己解决这个问题。 我在这里找到了一个高投票的生成器,很有趣,但是作者在 Java 中写了它。不幸的是,我仍然是 javascript(!) 的菜鸟。有人可以告诉我如何翻译吗? 欢迎提供替代建议。如果我能弄清楚应该在哪里发布它,我很乐意分享我的脚本。毫无疑问会有很多关于改进我的代码的建议...... 这是我指的发电机: Algorithm to randomly generate an aesthetically-pleasing color palette 非常感谢!
看起来像这样:
function redColor(var red) {
return (Math.floor(Math.random() * 256) + red) / 2;
}
为红色、绿色和蓝色制作三个。然后,您可以使用 DOM 将 HTML 元素的背景设置为结果。或者,如果您只想提供颜色值,则可以将它们绑在一起。你必须将它们作为 3 个单独的变量,因为我不知道颜色对象。
在 JavaScript 中设置背景:
element.style.backgroundColor = rgb(redColor(greenColorToMix), greenColor(redColorToMix), blueColor(blueColorToMix));
尽可能阅读 Java 代码和随附的注释。
写下 'program' 更高级的伪代码。像 "mix each random colour with the mix-in colour" 这样的语句。将每个伪代码语句分解成几个更详细的伪代码片段。
将伪代码翻译成Java脚本。
注意:链接代码不会生成令人愉悦的和谐色彩组合。它生成随机组合,并通过与颜色混合(建议使用白色作为柔和色)来减少 不和谐。
阅读色彩和谐理论并想出更好的东西。
我喜欢第二个答案中 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)];
}