2012-05-10 6 views
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の値を知っていたら、なぜ彼はそれをやろうとしますか?)私は実際にこのようなことは見たことがありません。

答えて

2

hは、配列のインデックスになります。これは実際に多少畳み込まれたコードです。おそらくswitch文を使用するか、これと類似したものがこの場合にはもっと明確になります。 hは、0と5の間の数値です(モジュロ360、60で割った値)。

+0

ああ、それは面白いです。説明ありがとう! –

関連する問題