Colors 生成n色彩虹调色板
我正试图用()生成一个具有15种不同颜色的彩虹:Colors 生成n色彩虹调色板,colors,processing,rgb,color-palette,hsb,Colors,Processing,Rgb,Color Palette,Hsb,我正试图用()生成一个具有15种不同颜色的彩虹: 大小(360100); 彩色模式(HSB,360100100);//[0,360]中的色调(度), //饱和度/亮度(单位:0,100) //就像在Photoshop中一样 仰泳(); 对于(int i=0;i
大小(360100);
彩色模式(HSB,360100100);//[0,360]中的色调(度),
//饱和度/亮度(单位:0,100)
//就像在Photoshop中一样
仰泳();
对于(int i=0;i<15;i++)
{
填充(i*24100100);/24*15=360
rect(i*24,0,25,100);
}
但它并没有产生丰富的15彩虹调色板,而是缺少了一些颜色(例如鲜艳的黄色)
是否有一种众所周知的算法来生成生动的彩虹调色板?要了解发生了什么,请尝试创建一个程序,为每个值0-360显示一行:
大小(360100);
彩色模式(HSB,360,100,100);
仰泳();
对于(int i=0;i<360;i++)
{
填充(i、100、100);
rect(i,0,1100);
}
您将看到:
请注意,“鲜艳的黄色”条带比绿色或蓝色条带窄得多。这就是为什么简单地对每个X值进行采样不会生成黄色
黄色大约为值60
,因此您可以修改增量,使其落在60上。绘制12个宽度为30的矩形可以让您在黄色区域着陆:
大小(360100);
彩色模式(HSB,360,100,100);
仰泳();
对于(int i=0;i<360;i++)
{
填充(i*30、100、100);
rect(i*30,0,30,100);
}
或者,您可以提前提出所需的值,并将其放入数组中,而不是使用均匀分布:
int[]hueValues={0,15,30,60,90,120,150,180,210,225,240,270,300,330,360};
规模(360100);
彩色模式(HSB,360,100,100);
仰泳();
for(int index=0;index
我创建了一个函数,可以生成N种颜色(彩虹)并输出字符串列表(十六进制值)。这是C语言,但逻辑可以转换。为了了解发生了什么,我将红色、蓝色和绿色的值与n进行了对比。这样,您将看到三个图,每个图都是分段函数,其关注点分别为n=0、n=1/4、n=1/2和n=3/4
List<string> GenerateRainbowPalette(int numColors)
{
var toRet = new List<SKColor>();
var n = (float)numColors;
for(var i = 0; i< numColors; i++)
{
int red = 255;
int green = 0;
int blue = 0;
//red: (first quarter)
if (i <= n / 4)
{
red = 255;
green = (int)(255 / (n / 4) * i);
blue = 0;
}
else if (i <= n / 2) //2nd quarter
{
red = (int)((-255)/(n/4)*i + 255 * 2);
green = 255;
blue = 0;
}
else if (i <= (.75)*n)
{ // 3rd quarter
red = 0;
green = 255;
blue = (int)(255 / (n / 4) * i + (-255 * 2));
}
else if(i > (.75)*n)
{
red = 0;
green = (int)(-255 * i / (n / 4) + (255 * 4));
blue = 255;
}
//generate hex string:
var redHex = red.ToString("X2");
var greenHex = green.ToString("X2");
var blueHex = blue.ToString("X2");
var color = $"#{redHex}{greenHex}{blueHex}";
toRet.Add(color);
}
return toRet;
}
列表生成器InbowPalette(int numColor)
{
var toRet=新列表();
var n=(浮点)numColors;
对于(var i=0;i