Dal momento che hai detto che hai uno sfondo stazionario, il colore delle palle può ancora essere casuale ma devono cadere a determinate distanze che complimentano ancora lo sfondo.
Nozioni di base. Prima di farlo, devi conoscere le basi. Considera i seguenti colori:
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)
Miscela di colori RGB [(0..255), (0..255), (0..255)] crea nuovi colori come sopra.
Calcolo dei colori negativi Il calcolo dei colori negativi è come trasformare il rosso in ciano, il verde in viola, il blu in giallo.
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)
Colore complementare
Come riferimento sui colori complementari di calcolo: http://serennu.com/colour/rgbtohsl.php
Informazioni su HSL
HSL esprime i colori in termini di tonalità, saturazione e luminosità, fornendo un numero per ciascuno di questi tre attributi del colore.
La tonalità è la posizione del colore sulla ruota dei colori, espressa in gradi da 0 ° a 359 °, che rappresenta i 360 ° della ruota; 0 ° essendo rosso, 180 ° essendo rosso di colore opposto ciano, e così via.
La saturazione è l'intensità del colore, quanto è opaca o luminosa. Più bassa è la saturazione, più opaco (più grigio) appare il colore. Questo valore è espresso in percentuale, con il 100% di saturazione completa, il più luminoso e lo 0% senza saturazione, grigio.
La leggerezza è la luce del colore. Leggermente diverso dalla saturazione. Più bianco è il colore, maggiore è il suo valore di Luminosità, più nero è, minore è la sua Luminosità. Quindi il 100% di luminosità trasforma il colore in bianco, lo 0% di luminosità trasforma il colore in nero e il colore "puro" sarebbe il 50% di luminosità.
È più facile vedere la differenza tra Saturazione e Luminosità che spiegarla. Se vuoi chiarire, prova a visualizzare le variazioni di Luminosità e Saturazione nella pagina del calcolatore di colore, scegliendo un colore abbastanza brillante come colore di partenza.
Quindi la notazione HSL si presenta così, fornendo i valori di Tonalità, Saturazione e Luminosità in questo ordine: t
Rosso: 0 ° 100% 50% Rosa pallido: 0 ° 100% 90% Ciano: 180 ° 100% 50% Ecco i passaggi:
Converti il tuo colore in HSL.
Cambia il valore della tonalità in quello della tonalità opposta (ad esempio, se la tonalità è 50 °, quella opposta si troverà a 230 ° sulla ruota - 180 ° più avanti).
Lascia i valori di saturazione e luminosità per come erano.
Converti questo nuovo valore HSL nella tua notazione cromatica originale (RGB o altro).
Siti come EasyRGB.com possono eseguire conversioni generiche da RGB a HSL o viceversa.
Esempio di programmazione fatto in PHP come da riferimento
Conversione da RGB a HSL
Il valore sopra Blue # 0000FF rgb (0,0,255) può essere presentato come Red esadecimale 00 + Green esadecimale 00 + Blue esadecimale FF
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
Può anche essere presentato come decimale rosso 0 + decimale verde 0 + decimale blu 255
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
Ora collega questi valori nella routine rgb2hsl. Di seguito è la mia versione PHP del codice generico di EasyRGB.com per quella conversione:
L'input è $ var_r, $ var_g e $ var_b dall'alto L'output è equivalente HSL come $ h, $ s e $ l - questi sono nuovamente espressi come frazioni di 1, come i valori di input
$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;
};
};
Quindi ora abbiamo il colore come valore HSL, nelle variabili $ h, $ s e $ l. Queste tre variabili di output vengono nuovamente mantenute come frazioni di 1 in questa fase, piuttosto che come gradi e percentuali. Ad esempio, il ciano (180 ° 100% 50%) verrebbe fuori come $ h = 0,5, $ s = 1 e $ l = 0,5.
Quindi trova il valore della tonalità opposta, cioè quella che è 180 °, o 0,5, di distanza (sono sicuro che i matematici hanno un modo più elegante di dotarlo, ma):
Calcola la tonalità opposta, $ h2
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
Il valore HSL del colore complementare è ora in $ h2, $ s, $ l. Quindi siamo pronti a riconvertirlo in RGB (di nuovo, la mia versione PHP della formula EasyRGB.com). Nota che i formati di input e output sono diversi questa volta, vedi i miei commenti nella parte superiore del codice:
L'input è il valore HSL di colore complementare, tenuto in $ h2, $ s, $ l come frazioni di 1 L'output è RGB nel normale formato 255 255 255, tenuto in $ r, $ g, $ b La tonalità viene convertita usando la funzione hue_2_rgb, mostrata alla fine di questo codice
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);
};
E dopo quella routine, finalmente abbiamo $ r, $ ge $ b in formato 255 255 255 (RGB), che possiamo convertire in sei cifre esadecimali:
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhex è la nostra risposta: il colore complementare in esadecimale.
Dal momento che il tuo colore di sfondo è blu o 0,0.255 lo è HSL
Tonalità (H): 240 gradi / Saturazione (S): 100% / Luminosità (L): 4,9%
l'opposto di 240 è 60 in un cerchio, quindi la conversione in RGB dà un valore di # 181800