문제

일부 데이터를 텍스처에 그려고 싶습니다. 많은 항목을 연속으로합니다. 그것들은 순서대로 만들어지지 않았으며 모두 다른 크기 일 수 있습니다 (메모리 힙을 생각하십시오). 각 데이터 항목은 작은 사각형이며 구별 할 수 있기를 원하므로 각각 고유 한 색상을 갖기를 바랍니다.

이제 rand ()를 사용하여 RGB 값을 생성하고 모두 다르기를 바랍니다. 이것보다 더 좋은 방법이 있습니까? 예를 들어 (거의) 반복되기 전에 다른 색상을 순환하는 좋은 방법은 무엇입니까?

색상은 항목의 데이터와 일치하지 않아도됩니다. 나는 단지 많은 가치를보고 그들이 인접 해 있기 때문에 그것들이 다르다는 것을보고 싶어합니다.

나는 무언가를 알아낼 수 있지만 이것은 흥미로운 질문이라고 생각합니다. :)

도움이 되었습니까?

해결책

RGB 색상 모델을 사용하는 것은 좋은 색상 믹스를 얻는 좋은 방법이 아닙니다. 다른 색상 모델을 사용하여 색상을 생성 한 다음 해당 색상 모델에서 RGB로 변환하는 것이 좋습니다.

나는 당신에게 제안합니다 HSV 또는 HSL 대신 컬러 모델, 특히 당신은 색조.

X가 다른 색상 값을 원한다면 360의 스텝 크기로 0에서 360까지 변경하십시오.

다른 팁

일반적으로 RGB는 이런 종류의 일을하기에 좋은 색상 공간이 아닙니다. 이것은 RGB 트리플렛 사이에서 동일한 거리가 우리의 눈과 똑같이 다르지 않음을 의미합니다.

나는 아마도 일할 것이다 l*c*h* 우주 (또한보십시오) 공간, 또는 HSL 공간, 색조로 균일 한 간격을 생성하십시오. 이 공간은 대략 지각 적으로 선형으로 설계되었습니다.

당신의 샘플 공간은 무엇입니까 ... 우리가 얼마나 많은 아이템을 말하고 있습니까?

RGB 트리플 배열을 구축 할 수 있습니다.

for(int r = 0; r < 255; r = r+16)
   for(int g = 0; g < 255; g = g+16)
      for(int b = 0; b < 255; b = b+16)
           // take r, g, b and add it to a list

그런 다음 목록을 무작위로 만들고 반복하십시오. 그것은 반복 된 색상 전에 16^3 (4096) 다른 색상을 줄 것입니다.

Google "Delta E Cie 2000"; Colour-Difference 공식은 2 가지 색상 사이의 명백한 (시각적) 거리를 결정하는 데 유용합니다. (모니터에; 안료에 대한 다른 공식이 있습니다.) 실험실 공간 (Simon에서 소품)의 색상에서 작동하지만 지각적인 차이 계산을 적용합니다.

우리는 약 1.5 숫자가 시각적으로 보장하기에 충분하다는 것을 알았습니다. 별개의 색상 (즉, 서로 가까이 있으면 차이를 알 수 있지만 원한다면 식별 가능 색상 (전설에서 모든 색상을 찾을 수 있음)을 부딪쳐야합니다.

색상 세트를 만드는 것 ... 아마도 실험실 공간의 일부 구석에서 시작하여 시각적으로 충분히 큰 차이를 제공하는 단계 크기를 사용하여 걸어 다니는 것입니다 (참고 : 선형이 아니므로 스텝 크기가 필요할 것입니다. 적응 형) 후 목록을 무작위로 만들어보십시오.

이것은 색칠 맵과 관련된 4 색 문제와 매우 유사하며, 이는 몇 가지 흥미로운 솔루션을 생성 할 수 있습니다.

네 가지 색상 정리

지각 적으로 결정된 색상 세트가 필요하다면 (생성을위한 알고리즘이 아닌) 내 웹 사이트에서 무료 도구를 만들었습니다.
http://phrogz.net/css/distinct-colors.html

RGB 또는 HSV 공간 (인간 인식과 관련하여 균일하게 분포되지 않음)에서 균일 한 간격을 사용하는 대신이 도구를 사용하면 HSV 공간에서 값의 그리드를 생성 한 다음 CMC (I : C) 색상 거리의 표준은 지각 적으로 서로 너무 가까운 색상을 버립니다. (두 번째 탭의 '임계 값'슬라이더를 사용하면 색상이 얼마나 시각적으로 구별되는지 제어 할 수있어 결과를 실시간으로 보여줍니다.)

결국, 생성 된 색상 목록을 다양한 기준별로 정렬 한 다음 목록에 서로 인접한 시각적으로 영향을받는 값을 보장 할 수 있도록 해당 목록을 고르게 '셔플'할 수 있습니다. (약 5의 '인터 리브'값을 추천합니다)

이 글을 쓰는 시점 에서이 도구는 Chrome, Safari 및 (심을 통해) Firefox와 잘 작동합니다. IE9는 UI가 대화식 탐색에 광범위하게 사용하는 HTML5 범위 입력 슬라이더를 지원하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top