2012-05-10 40 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

Oho,這很有趣。感謝您的解釋! –