Vì bạn đã đề cập rằng bạn có một nền tảng đứng yên, màu sắc của các quả bóng vẫn có thể là ngẫu nhiên nhưng chúng phải rơi ở một số phạm vi nhất định mà vẫn khen nền.
Khái niệm cơ bản. Trước khi chúng tôi làm điều đó bạn cần biết những điều cơ bản. Hãy xem xét các màu sau:
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)
Hỗn hợp các màu RGB [(0..255), (0..255), (0..255)] tạo ra các màu mới như trên.
Tính toán cho các màu tiêu cực Tính toán cho màu âm giống như chuyển đổi màu đỏ thành màu lục lam, màu xanh lục màu tím, màu xanh lam màu vàng.
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)
Màu bổ sung
Theo tài liệu tham khảo về tính toán màu bổ sung: http://serennu.com/colour/rgbtohsl.php
Về HSL
HSL thể hiện màu sắc theo Huế, Độ bão hòa và Độ sáng của chúng, đưa ra một số cho mỗi ba thuộc tính của màu này.
Hue là vị trí của colour trên bánh xe màu, được biểu thị bằng độ từ 0 ° đến 359 °, đại diện cho 360 ° của bánh xe; 0 ° là màu đỏ, 180 ° là màu lục lam đối diện, v.v.
Độ bão hòa là cường độ của màu sắc, nó xỉn hay sáng như thế nào. Độ bão hòa càng thấp, màu càng đậm (màu xám). Điều này được biểu thị bằng phần trăm, 100% là bão hòa hoàn toàn, sáng nhất và 0% là không bão hòa, màu xám.
Sự nhẹ nhàng là màu sắc của ánh sáng. Hơi khác với bão hòa. Màu trắng càng nhiều thì giá trị Độ sáng của nó càng cao, màu đen càng nhiều, Độ sáng của nó càng thấp. Vì vậy, Độ sáng 100% chuyển sang màu trắng, 0% Độ sáng chuyển sang màu đen và màu "tinh khiết" sẽ là 50% Độ sáng.
Dễ dàng nhận thấy sự khác biệt giữa Saturation và Lightness hơn là giải thích nó. Nếu bạn muốn làm rõ, hãy thử xem các biến thể Độ sáng và Độ bão hòa trên trang máy tính màu, chọn màu khá sáng làm màu khởi đầu của bạn.
Vì vậy, ký hiệu HSL trông như thế này, đưa ra các giá trị Hue, Saturation và Lightness theo thứ tự đó: t
Màu đỏ: 0 ° 100% 50% Màu hồng nhạt: 0 ° 100% 90% Màu lục lam: 180 ° 100% 50% Dưới đây là các bước:
Chuyển đổi màu của bạn sang HSL.
Thay đổi giá trị Huế thành giá trị của Huế đối diện (ví dụ: nếu Huế của bạn là 50 °, giá trị ngược lại sẽ ở 230 ° trên bánh xe - xa hơn 180 ° xung quanh).
Để lại các giá trị Saturation và Lightness như cũ.
Chuyển đổi giá trị HSL mới này trở lại ký hiệu màu ban đầu của bạn (RGB hoặc bất cứ thứ gì).
Các trang web như EasyRGB.com có thể thực hiện chuyển đổi chung cho bạn từ RGB sang HSL hoặc ngược lại.
Lập trìnhVí dụ được thực hiện trong PHP theo tham chiếu
Chuyển đổi từ RGB sang HSL
Giá trị trên Blue # 0000FF rgb (0,0,255) có thể được trình bày dưới dạng Red Hexadecimal 00 + Green Hexadecimal 00 + Blue Hexadecimal FF
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
Nó cũng có thể được trình bày dưới dạng số thập phân màu đỏ 0 + số thập phân màu xanh 0 + số thập phân màu xanh 255
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
Bây giờ cắm các giá trị này vào thói quen rgb2hsl. Dưới đây là phiên bản PHP của mã chung của EasyRGB.com cho chuyển đổi đó:
Đầu vào là $ var_r, $ var_g và $ var_b từ phía trên Đầu ra là HSL tương đương với $ h, $ s và $ l - chúng được biểu thị lại dưới dạng phân số 1, giống như các giá trị đầu vào
$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;
};
};
Vì vậy, bây giờ chúng ta có màu như một giá trị HSL, trong các biến $ h, $ s và $ l. Ba biến đầu ra này một lần nữa được giữ dưới dạng phân số 1 ở giai đoạn này, thay vì theo độ và tỷ lệ phần trăm. Vì vậy, ví dụ, màu lục lam (180 ° 100% 50%) sẽ xuất hiện dưới dạng $ h = 0,5, $ s = 1 và $ l = 0,5.
Tiếp theo, tìm giá trị của Huế đối diện, tức là cách 180 ° hoặc 0,5, (tôi chắc chắn các nhà toán học có cách chấm điểm này thanh lịch hơn, nhưng):
Tính màu sắc ngược lại, $ h2
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
Giá trị HSL của màu bổ sung hiện ở $ h2, $ s, $ l. Vì vậy, chúng tôi đã sẵn sàng để chuyển đổi lại thành RGB (một lần nữa, phiên bản PHP của công thức EasyRGB.com). Lưu ý các định dạng đầu vào và đầu ra là khác nhau lần này, xem nhận xét của tôi ở đầu mã:
Đầu vào là giá trị HSL của màu bổ sung, được giữ ở $ h2, $ s, $ l dưới dạng phân số của 1 Đầu ra là RGB ở định dạng 255 255 255 bình thường, được giữ ở $ r, $ g, $ b Hue được chuyển đổi bằng hàm hue_2_rgb, được hiển thị ở cuối mã này
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);
};
Và sau thói quen đó, cuối cùng chúng ta cũng có định dạng $ r, $ g và $ b ở định dạng 255 255 255 (RGB), chúng ta có thể chuyển đổi thành sáu chữ số hex:
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhex là câu trả lời của chúng tôi - màu bổ sung trong hex.
Vì nền màu của bạn là màu xanh hoặc 0,0,255, HSL là
Huế (H): 240 độ / Độ bão hòa (S): 100% / Độ sáng (L): 4,9%
đối diện với 240 là 60 trong một vòng tròn sau đó chuyển đổi trở lại RGB cho giá trị # 181800