2012-05-24 5 views
2

전 색상 조정이 필요하고 색상 범위가 무한대 인 전설이 있습니다 (50-100 개의 식별자로 무한대입니다.) 색상 스펙트럼을 사용하고 싶습니다. 무지개처럼 범례의 항목 수에서 색상을 균등하게 분배합니다. 예 :수에 따라 균등하게 분산 된 색상 범위

풀 A, B 및 C가 있으며 색상이 구별되기를 원합니다 .A는 빨간색, B는 오렌지색입니다. , 그리고 C는 녹색 등 내가 동적으로 000000에서 FFFFFF로가는 16 진수 색상 코드를 사용하여 알아 낸 것입니다. 그래서 내 수영장 균등하게 그 범위에서 세 가지 색상을 선택할 것입니다. 만약 내가 10 풀을 가지고, 그것을 균등하게 10 색상 등등.이 작업을 수행하는 가장 좋은 알고리즘은 무엇입니까?

이것은 자바 스크립트로 이루어 지지만 SASS로 끝내고 싶습니다.

답변

4

알고리즘을 인간으로 만드는 것이 강력히 권장됩니다. 무역을 알고있는 누군가가 당신을 위해 100 가지 색상을 선택하고 (눈으로 가장 즐겁게) 이것을 정적 배열로 사용하고 색인을 사용하십시오 0..N-1. 상기

는 : U/V의 색 좌표 인와 Y는 휘도하게하여

R=Y+V/0.88 
G=Y-0.38*U-0.58*V 
B=Y+U/0.49 

, 공통 알고리즘은 PAL/NTSC 컬러 모델을 사용하는 것이다.

U/V- 평면에서 중심이 반경 인 원이 반경 1이고 N 점이 표시됩니다.이 작업은 U = cos (φ), V = sin (φ) 및 φ로 간단히 수행 할 수 있습니다. φ 단계는 0..360도입니다. 이것은 N (U/V) 튜플의 배열을 제공합니다.

아이 플레 싱 Y (ca. 0.5)를 사용하면 위에서와 같이 RGB 값을 계산하므로 N (R/G/B) 튜플의 배열이됩니다.

+0

직접 해 보셨습니까? 나는 RGB 값을 얻지 못한다. –

+1

http://stuff.drnet.at/colors.html –

+0

정말 고마워. –

2

정확히 무엇을 요구하고 있는지 확실하지 않지만 도움이 될 수 있습니다. 그것은 w = 0 (빨강)에서 w = 1.0 (보라색)까지 무지개의 색을 뱉어 낸다. 당신이 N의 색상을 균등하게 분할하고 싶었다면, 나는 이런 짓을 했을까 :

for(int i = 0; i<N; i++){ 
    colors[i] = spectrum(i/((double)(N-1))); 
} 

이 방법을 사용 :

public Color spectrum(double w) { 
if (w>1)w=1; 
if (w<0)w=0; 

w=w*(645-380)+380; 
double R,B,G; 
if (w >= 380 && w < 440){ 
    R = -(w - 440.) /(440. - 350.); 
    G = 0.0; 
    B = 1.0; 
} 
else if (w >= 440 && w < 490){ 
    R = 0.0; 
    G = (w - 440.) /(490. - 440.); 
    B = 1.0; 
} 
else if (w >= 490 && w < 510){ 
    R = 0.0; 
    G = 1.0; 
    B = (510-w) /(510. - 490.); 
} 
else if (w >= 510 && w < 580){ 
    R = (w - 510.) /(580. - 510.); 
    G = 1.0; 
    B = 0.0; 
} 
else if (w >= 580 && w < 645){ 
    R = 1.0; 
    G = -(w - 645.) /(645. - 580.); 
    B = 0.0; 
} 
else if (w >= 645 && w <= 780){ 
    R = 1.0; 
    G = 0.0; 
    B = 0.0; 
} 
else{ 
    R = 0.0; 
    G = 0.0; 
    B = 0.0; 
} 
return new Color(R,G,B); 

} 

죄송는 자바 스크립트 아니다. 나는 자바에 더 능숙하다. 거기에있는 숫자는 나노 미터 단위의 파장에 매핑되므로 모든 종류의 것들에 유용합니다. R, G, B 값은 물론 255로 곱하고 십진수를 잘라내어 int로 변환 할 수 있습니다.

관련 문제