Karena Anda menyebutkan bahwa Anda memiliki latar belakang stasioner, warna bola masih bisa acak tetapi mereka harus jatuh pada rentang tertentu yang masih memuji latar belakang.
Dasar-dasar Sebelum kita melakukan itu, Anda perlu mengetahui dasar-dasarnya. Pertimbangkan warna-warna berikut:
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)
Campuran Warna RGB [(0..255), (0..255), (0..255)] menciptakan warna baru seperti di atas.
Komputasi untuk Warna Negatif Komputasi untuk warna negatif seperti mentransformasikan merah dalam cyan, hijau dalam ungu, biru dalam kuning.
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)
Warna Pelengkap
Sesuai referensi tentang Komputasi warna komplementer: http://serennu.com/colour/rgbtohsl.php
Tentang HSL
HSL mengekspresikan warna dalam kaitannya dengan Hue, Saturation, dan Lightness mereka, memberikan angka untuk masing-masing dari ketiga atribut warna ini.
Hue adalah posisi warna pada roda warna, dinyatakan dalam derajat dari 0 ° hingga 359 °, mewakili 360 ° roda; 0 ° menjadi merah, 180 ° menjadi warna berlawanan cyan, dan seterusnya.
Kejenuhan adalah intensitas warna, seberapa kusam atau cerahnya warna itu. Semakin rendah saturasi, semakin kusam (abu-abu) warna terlihat. Ini dinyatakan sebagai persentase, 100% menjadi saturasi penuh, paling terang, dan 0% menjadi tidak saturasi, abu-abu.
Lightness adalah seberapa terang warnanya. Sedikit berbeda dengan saturasi. Semakin putih warna semakin tinggi nilai Terangnya, semakin banyak hitam, semakin rendah Terangnya. Jadi 100% Lightness mengubah warna menjadi putih, 0% Lightness mengubah warna menjadi hitam, dan warna "murni" akan menjadi 50% Lightness.
Lebih mudah untuk melihat perbedaan antara Saturasi dan Terang daripada menjelaskannya. Jika Anda ingin memperjelas, coba lihat variasi Lightness dan Saturation pada halaman kalkulator warna, pilih warna yang cukup cerah sebagai warna starter Anda.
Jadi notasi HSL terlihat seperti ini, memberikan nilai Hue, Saturation, dan Lightness dalam urutan itu: t
Merah: 0 ° 100% 50% Merah muda pucat: 0 ° 100% 90% Cyan: 180 ° 100% 50% Berikut adalah Langkah-langkahnya:
Ubah warna Anda menjadi HSL.
Ubah nilai Hue ke nilai Hue yang berlawanan (misalnya, jika Hue Anda adalah 50 °, yang berlawanan akan berada pada 230 ° pada roda - 180 ° lebih jauh di sekitar).
Biarkan nilai Saturation and Lightness seperti semula.
Ubah nilai HSL baru ini kembali ke notasi warna asli Anda (RGB atau apa pun).
Situs seperti EasyRGB.com dapat melakukan konversi generik untuk Anda dari RGB ke HSL atau sebaliknya.
Contoh Pemrograman dilakukan dalam PHP sesuai referensi
Konversi dari RGB ke HSL
Nilai di atas Biru # 0000FF rgb (0,0255) dapat disajikan sebagai Heksadesimal Merah 00 + Heksadesimal Hijau 00 + FF Heksadesimal Biru
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
Itu juga dapat disajikan sebagai Desimal Merah 0 + Desimal Hijau 0 + Desimal Biru 255
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
Sekarang colokkan nilai-nilai ini ke dalam rutin rgb2hsl. Di bawah ini adalah versi generik kode EasyRGB.com PHP saya untuk konversi itu:
Input adalah $ var_r, $ var_g dan $ var_b dari atas. Outputnya setara dengan $ h, $ s dan $ l - ini sekali lagi dinyatakan dalam pecahan 1, seperti nilai 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;
};
};
Jadi sekarang kita memiliki warna sebagai nilai HSL, dalam variabel $ h, $ s dan $ l. Ketiga variabel keluaran ini lagi-lagi dianggap sebagai pecahan 1 pada tahap ini, bukan sebagai derajat dan persentase. Jadi misalnya, cyan (180 ° 100% 50%) akan keluar sebagai $ h = 0,5, $ s = 1, dan $ l = 0,5.
Selanjutnya temukan nilai Hue yang berlawanan, yaitu yang berjarak 180 °, atau 0,5, jauh (saya yakin para ahli matematika memiliki cara yang lebih elegan untuk menyamakan ini, tetapi):
Hitung rona yang berlawanan, $ h2
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
Nilai HSL dari warna komplementer sekarang dalam $ h2, $ s, $ l. Jadi kami siap untuk mengonversikan ini kembali ke RGB (sekali lagi, versi PHP dari rumus EasyRGB.com). Perhatikan format input dan output berbeda kali ini, lihat komentar saya di bagian atas kode:
Input adalah nilai HSL dari warna komplementer, disimpan dalam $ h2, $ s, $ l sebagai fraksi dari 1 Output adalah RGB dalam format 255 255 255 normal, disimpan dalam $ r, $ g, $ b Hue dikonversi menggunakan fungsi hue_2_rgb, ditunjukkan di akhir kode ini
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);
};
Dan setelah rutin itu, kami akhirnya memiliki $ r, $ g dan $ b dalam format 255 255 255 (RGB), yang dapat dikonversi menjadi enam digit hex:
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhex adalah jawaban kami - warna pelengkap dalam hex.
Karena latar belakang warna Anda biru atau 0,0255 HSL adalah
Hue (H): 240 derajat / Saturasi (S): 100% / Ringan (L): 4,9%
kebalikan dari 240 adalah 60 dalam lingkaran kemudian konversikan kembali ke RGB memberikan nilai # 181800