Оскільки ви згадали, що у вас є стаціонарне тло, колір кульок все ще може бути випадковим, але вони повинні випадати в певних діапазонах, які все ще компліментують фон.
Основи. Перш ніж ми це зробимо, ви повинні знати основи. Розглянемо наступні кольори:
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)
Суміш кольорів RGB [(0..255), (0..255), (0..255)] створює нові кольори, як вище.
Обчислення негативних кольорів Обчислення негативного кольору так само, як перетворення червоного в блакитний, зеленого у фіолетовий, синього в жовтий.
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)
Додатковий колір
Відповідно до посилань на обчислення додаткових кольорів: http://serennu.com/colour/rgbtohsl.php
Про HSL
HSL виражає кольори за їх відтінком, насиченістю та легкістю, даючи число кожному з цих трьох атрибутів кольору.
Відтінок - це колір кольору на кольоровому колесі, виражений у градусах від 0 ° до 359 °, що представляє 360 ° колеса; 0 ° - червоний, 180 ° - червоний, протилежно-кольоровий, тощо.
Насиченість - це інтенсивність кольору, наскільки він тьмяний або яскравий. Чим нижча насиченість, тим виглядає темніше (сірий) колір. Це виражається у відсотках, 100% - це повна насиченість, найяскравіша, а 0% - відсутність насичення, сіра.
Легкість - такий світлий колір. Трохи відрізняється від насичення. Чим більше білого кольору, тим вище його значення світлоти, тим більше чорного, тим менша його легкість. Так 100% легкість перетворює колір у білий, 0% легкість перетворює колір у чорний, а "чистий" колір - 50% легкість.
Простіше помітити різницю між насиченістю та легкістю, ніж пояснити це. Якщо ви хочете уточнити, спробуйте переглянути варіанти світлості та насиченості на сторінці кольорового калькулятора, вибравши досить яскравий колір як ваш початковий колір.
Отже, позначення HSL виглядає так, даючи значення відтінку, насиченості та легкості в такому порядку: t
Червоний: 0 ° 100% 50% Блідо-рожевий: 0 ° 100% 90% Блакитний: 180 ° 100% 50% Ось такі кроки:
Перетворіть свій колір у HSL.
Змініть значення відтінку на значення відтінку Hue (наприклад, якщо ваш відтінок становить 50 °, протилежне буде на 230 ° на колесі - на 180 ° далі).
Залиште значення Насиченості та Легкості такими, якими вони були.
Перетворіть це нове значення HSL назад у своє початкове позначення кольорів (RGB або інше).
Такі сайти, як EasyRGB.com, можуть зробити для вас загальну конверсію з RGB в HSL або навпаки.
Приклад програмування, виконаний у PHP згідно з довідкою
Перетворення з RGB в HSL
Значення вище синього # 0000FF rgb (0,0255) можна представити як червоний шістнадцятковий 00 + зелений шістнадцятковий 00 + синій шістнадцятковий FF
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
Він також може бути представлений у вигляді червоного десятичного 0 + зеленого десятичного 0 + синього десятичного 255
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
Тепер підключіть ці значення до програми rgb2hsl. Нижче наведено мою PHP-версію загального коду EasyRGB.com для цієї конверсії:
Введення - $ var_r, $ var_g і $ var_b зверху. Вихід HSL еквівалентний як $ h, $ s і $ l - вони знову виражаються у вигляді дробів 1, як вхідні значення
$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;
};
};
Отже, тепер у нас є колір у вигляді значення HSL у змінних $ h, $ s та $ l. Ці три вихідні змінні на цій стадії знову вважаються дробами 1, а не як градуси та відсотки. Так, наприклад, циан (180 ° 100% 50%) виходив би як $ h = 0,5, $ s = 1, і $ l = 0,5.
Далі знайдіть значення протилежного відтінку, тобто того, яке на 180 °, або 0,5, (я впевнений, що математики мають більш елегантний спосіб зробити це, але):
Обчисліть протилежний відтінок, $ h2
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
Значення додаткового кольору HSL зараз у $ h2, $ s, $ l. Тож ми готові перетворити це назад у RGB (знову ж таки, моя PHP-версія формули EasyRGB.com). Зверніть увагу, що формати введення та виведення цього разу різні, дивіться мої коментарі вгорі коду:
Вхід - значення HSL додаткового кольору, що міститься у $ h2, $ s, $ l у вигляді дробів 1 Вихід RGB у нормальному форматі 255 255 255, утримується у $ r, $ g, $ b Відтінок перетворюється за допомогою функції hue_2_rgb, показаної в кінці цього коду
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);
};
І після цього розпорядження ми нарешті маємо $ r, $ g і $ b у форматі 255 255 255 (RGB), які ми можемо перетворити на шість цифр шістнадцяткових:
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhex - наша відповідь - додатковий колір у шістнадцятковій формі.
Оскільки ваш кольоровий фон блакитний або 0,0255, це HSL
Відтінок (В): 240 градусів / насиченість (S): 100% / Легкість (L): 4,9%
навпаки 240 - це 60 у колі, тоді перетворення назад у RGB дає значення # 181800