Dado que no mencionó que tiene un fondo estacionario, el color de las bolas aún puede ser aleatorio, pero tienen que caer en ciertos rangos que aún complementan el fondo.
Lo esencial. Antes de hacerlo, debe conocer los conceptos básicos. Considere los siguientes colores:
Black #000000 rgb(0,0,0)
Red #FF0000 rgb(255,0,0)
Green #00FF00 rgb(0,255,0)
Blue #0000FF rgb(0,0,255)
Yellow #FFFF00 rgb(255,255,0)
Cyan #00FFFF rgb(0,255,255)
Pink #FF00FF rgb(255,0,255)
Gray #C0C0C0 rgb(192,192,192)
White #FFFFFF rgb(255,255,255)
Mezcla de colores RGB [(0..255), (0..255), (0..255)] crea nuevos colores como el anterior.
Calcular para colores negativos Calcular para colores negativos es como transformar rojo en cian, verde en morado, azul en amarillo.
Red #FF0000 rgb(255,0,0) -> Cyan #00FFFF rgb(0,255,255)
Green #00FF00 rgb(0,255,0) -> Purple #FF00FF rgb(255,0,255)
Blue #0000FF rgb(0,0,255) -> Yellow #FFFF00 rgb(255,255,0)
Color complementario
Según la referencia en Computación de colores complementarios: http://serennu.com/colour/rgbtohsl.php
Sobre HSL
HSL expresa los colores en términos de su tono, saturación y luminosidad, dando un número para cada uno de estos tres atributos del color.
El tono es la posición del color en la rueda de color, expresada en grados de 0 ° a 359 °, que representa los 360 ° de la rueda; 0 ° es rojo, 180 ° es el color opuesto al rojo cian, y así sucesivamente.
La saturación es la intensidad del color, lo opaco o brillante que es. Cuanto más baja es la saturación, más opaco (gris) se ve el color. Esto se expresa como un porcentaje, el 100% es saturación total, la más brillante, y el 0% es saturación, gris.
La ligereza es la luz del color. Ligeramente diferente a la saturación. Cuanto más blanco sea el color, mayor será su valor de Luminosidad, cuanto más negro, menor será su Luminosidad. Entonces, el 100% de luminosidad convierte el color en blanco, el 0% de luminosidad convierte el color en negro y el color "puro" sería el 50% de luminosidad.
Es más fácil ver la diferencia entre Saturación y Luminosidad que explicarla. Si desea aclarar, intente ver las variaciones de Luminosidad y Saturación en la página de la calculadora de color, eligiendo un color bastante brillante como color inicial.
Entonces la notación HSL se ve así, dando los valores de Tono, Saturación y Luminosidad en ese orden: t
Rojo: 0 ° 100% 50% Rosa pálido: 0 ° 100% 90% Cian: 180 ° 100% 50% Estos son los pasos:
Convierte tu color a HSL.
Cambie el valor de Hue al valor del Hue opuesto (por ejemplo, si su Hue es de 50 °, el opuesto estará a 230 ° en la rueda - 180 ° más alrededor).
Deje los valores de Saturación y Luminosidad como estaban.
Convierta este nuevo valor HSL nuevamente a su notación de color original (RGB o lo que sea).
Sitios como EasyRGB.com pueden realizar conversiones genéricas de RGB a HSL o viceversa.
Ejemplo de programación realizado en PHP según referencia
Conversión de RGB a HSL
El valor por encima de Azul # 0000FF rgb (0,0,255) se puede presentar como Rojo Hexadecimal 00 + Verde Hexadecimal 00 + Azul Hexadecimal FF
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
También se puede presentar como Rojo Decimal 0 + Verde Decimal 0 + Azul Decimal 255
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
Ahora conecte estos valores a la rutina rgb2hsl. A continuación se muestra mi versión PHP del código genérico de EasyRGB.com para esa conversión:
La entrada es $ var_r, $ var_g y $ var_b desde arriba La salida es equivalente a HSL como $ h, $ sy $ l - estos se expresan nuevamente como fracciones de 1, como los valores de entrada
$var_min = min($var_r,$var_g,$var_b);ttt
$var_max = max($var_r,$var_g,$var_b);
$del_max = $var_max - $var_min;
$l = ($var_max + $var_min) / 2;
if ($del_max == 0)
{
$h = 0;
$s = 0;
}
else
{
if ($l < 0.5)
{
$s = $del_max / ($var_max + $var_min);
}
else
{
$s = $del_max / (2 - $var_max - $var_min);
};
$del_r = ((($var_max - $var_r) / 6) + ($del_max / 2)) / $del_max;
$del_g = ((($var_max - $var_g) / 6) + ($del_max / 2)) / $del_max;
$del_b = ((($var_max - $var_b) / 6) + ($del_max / 2)) / $del_max;
if ($var_r == $var_max)
{
$h = $del_b - $del_g;
}
elseif ($var_g == $var_max)
{
$h = (1 / 3) + $del_r - $del_b;
}
elseif ($var_b == $var_max)
{
$h = (2 / 3) + $del_g - $del_r;
};
if ($h < 0)
{
$h += 1;
};
if ($h > 1)
{
$h -= 1;
};
};
Entonces ahora tenemos el color como un valor HSL, en las variables $ h, $ sy $ l. Estas tres variables de salida se mantienen nuevamente como fracciones de 1 en esta etapa, en lugar de como grados y porcentajes. Entonces, por ejemplo, el cian (180 ° 100% 50%) saldría como $ h = 0.5, $ s = 1 y $ l = 0.5.
Luego, encuentre el valor del Hue opuesto, es decir, el que está a 180 °, o 0.5, de distancia (estoy seguro de que los matemáticos tienen una forma más elegante de adorar esto, pero):
Calcule el tono opuesto, $ h2
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
El valor HSL del color complementario ahora está en $ h2, $ s, $ l. Así que estamos listos para convertir esto nuevamente a RGB (nuevamente, mi versión PHP de la fórmula EasyRGB.com). Tenga en cuenta que los formatos de entrada y salida son diferentes esta vez, vea mis comentarios en la parte superior del código:
La entrada es el valor HSL del color complementario, se mantiene en $ h2, $ s, $ l como fracciones de 1 La salida es RGB en formato normal 255 255 255, se mantiene en $ r, $ g, $ b El tono se convierte con la función hue_2_rgb, se muestra al final de este código
if ($s == 0)
{
$r = $l * 255;
$g = $l * 255;
$b = $l * 255;
}
else
{
if ($l < 0.5)
{
$var_2 = $l * (1 + $s);
}
elset
{
$var_2 = ($l + $s) - ($s * $l);
};
$var_1 = 2 * $l - $var_2;
$r = 255 * hue_2_rgb($var_1,$var_2,$h2 + (1 / 3));
$g = 255 * hue_2_rgb($var_1,$var_2,$h2);
$b = 255 * hue_2_rgb($var_1,$var_2,$h2 - (1 / 3));
};
// Function to convert hue to RGB, called from above
function hue_2_rgb($v1,$v2,$vh)
{
if ($vh < 0)
{
$vh += 1;
};
if ($vh > 1)
{
$vh -= 1;
};
if ((6 * $vh) < 1)
{
return ($v1 + ($v2 - $v1) * 6 * $vh);
};
if ((2 * $vh) < 1)
{
return ($v2);
};
if ((3 * $vh) < 2)
{
return ($v1 + ($v2 - $v1) * ((2 / 3 - $vh) * 6));
};
return ($v1);
};
Y después de esa rutina, finalmente tenemos $ r, $ gy $ b en formato 255 255 255 (RGB), que podemos convertir a seis dígitos de hexadecimal:
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhex es nuestra respuesta: el color complementario en hexadecimal.
Como su fondo de color es azul o 0,0,255, el HSL es
Tono (H): 240 grados / Saturación (S): 100% / Luminosidad (L): 4.9%
el opuesto de 240 es 60 en un círculo, luego convertir de nuevo a RGB da un valor de # 181800