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

오오, 재미 있습니다. 설명 주셔서 감사합니다! –

관련 문제