3

Raphael.js のソースで見つけたこのコードをデコードしようとしています (HSL カラーから RGB カラーに変換されます。これは関数の一部にすぎません)。

var R, G, B, X, C;
h = (h % 360) / 60;
C = 2 * s * (l < .5 ? l : 1 - l);
X = C * (1 - abs(h % 2 - 1));
R = G = B = l - C / 2;

h = ~~h;
R += [C, X, 0, 0, X, C][h];
G += [X, C, C, X, 0, 0][h];
B += [0, 0, X, C, C, X][h];

今、私は何をするかを知ってh = ~~hいます (基本的には、いくつかの重要な違いを伴う数字を床に置きます) が、これが何を意味するのか、私の人生では理解できません:

R += [C, X, 0, 0, X, C][h];

なぜ彼は配列を作成してそれを参照[h]しているのでしょうか? h彼は一連の値の中から変数が等しい値を見つけていますか? (しかし、彼が の値を既に知っているのに、なぜ彼はそんなことをするのでしょうhか?) 私は実際にこのようなものを見たことがありません。

4

1 に答える 1

2

h配列内のインデックスになります。これは確かにやや複雑なコードです。この場合、switch ステートメントまたは同様のものを使用すると、より明確になる可能性があります。h0 から 5 までの数値です (モジュロ 360 を 60 で割った値)。

于 2012-05-10T22:35:14.210 に答える