あなたは静止した背景を得たと言ったので、ボールの色はまだランダムである可能性がありますが、それらはまだ背景を補完する特定の範囲に落ちなければなりません。
基本。その前に、基本を知る必要があります。次の色を考慮してください。
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は、色を色相、彩度、明度で表現し、これら3つの色の属性ごとに番号を付けます。
色相は、カラーホイール上の色の位置で、0°から359°の角度で表され、ホイールの360°を表します。0°は赤、180°は赤の反対色のシアンなどです。
彩度とは、色の強さ、色の鈍さまたは明るさです。彩度が低いほど、色が鈍くなります(灰色になります)。これは百分率で表され、100%は完全な彩度で最も明るく、0%は彩度なし、灰色です。
明るさは色の明るさです。彩度とは少し異なります。色の白が多いほどその明度値が高くなり、黒が多いほどその明度は低くなります。したがって、100%の明度は色を白に、0%の明度は色を黒に、「純粋な」色は50%の明度になります。
彩度と明度の違いは、説明するよりも簡単にわかります。明確にしたい場合は、色の計算ページで明度と彩度のバリエーションを表示し、スターターカラーとして非常に明るい色を選択してください。
HSL表記は次のようになり、色相、彩度、明度の値を次の順序で示します。
赤:0°100%50%淡いピンク:0°100%90%シアン:180°100%50%手順は次のとおりです。
色をHSLに変換します。
Hueの値を反対のHueの値に変更します(たとえば、Hueが50°の場合、反対のHueはホイール上で230°になります-さらに180°回ります)。
彩度と明度の値をそのままにします。
この新しいHSL値を元の色表記(RGBなど)に変換します。
EasyRGB.comのようなサイトは、RGBからHSLまたはその逆への一般的な変換を行うことができます。
プログラミングリファレンスごとにPHPで行われた例
RGBからHSLへの変換
青#0000FF rgb(0,0,255)より上の値は、赤16進数00 +緑16進数00 +青16進数FFとして表示できます。
$redhex = substr($hexcode,0,2);
$greenhex = substr($hexcode,2,2);
$bluehex = substr($hexcode,4,2);
赤10進数0 +緑10進数0 +青10進数255としても表示できます。
$var_r = (hexdec($redhex)) / 255;
$var_g = (hexdec($greenhex)) / 255;
$var_b = (hexdec($bluehex)) / 255;
次に、これらの値をrgb2hslルーチンにプラグインします。以下は、その変換のためのEasyRGB.comの汎用コードのPHPバージョンです。
入力は上記の$ 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;
};
};
これで、変数$ h、$ s、および$ lにHSL値として色ができました。これらの3つの出力変数は、この段階では度やパーセンテージとしてではなく、1の端数として保持されます。たとえば、シアン(180°100%50%)は、$ h = 0.5、$ s = 1、および$ l = 0.5として出力されます。
次に、反対側の色相の値、つまり180°または0.5離れた色相の値を見つけます(数学者はこれをよりエレガントにdotでる方法を持っているはずですが)。
反対の色相$ h2を計算します
$h2 = $h + 0.5;
if ($h2 > 1)
{
$h2 -= 1;
};
補色のHSL値は、現在$ h2、$ s、$ lです。したがって、これをRGBに変換する準備が整いました(これも、PHPバージョンのEasyRGB.com公式)。今回は入力形式と出力形式が異なることに注意してください。コードの上部にある私のコメントをご覧ください。
入力は補色のHSL値であり、1の小数として$ h2、$ s、$ lに保持出力は通常の255 255 255形式のRGB、$ r、$ g、$ bに保持Hueは関数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);
};
そして、そのルーチンの後、最終的に255 255 255(RGB)形式の$ r、$ g、および$ bが得られ、6桁の16進数に変換できます。
$rhex = sprintf("%02X",round($r));
$ghex = sprintf("%02X",round($g));
$bhex = sprintf("%02X",round($b));
$rgbhex = $rhex.$ghex.$bhex;
$ rgbhexが私たちの答えです。16進数の補色です。
色の背景は青または0,0,255なので、HSLは
色相(H):240度/彩度(S):100%/明度(L):4.9%
240の反対は円で60で、その後RGBに変換すると値が#181800になります