고유 한 색상을 생성합니다
-
13-09-2019 - |
문제
일부 데이터를 텍스처에 그려고 싶습니다. 많은 항목을 연속으로합니다. 그것들은 순서대로 만들어지지 않았으며 모두 다른 크기 일 수 있습니다 (메모리 힙을 생각하십시오). 각 데이터 항목은 작은 사각형이며 구별 할 수 있기를 원하므로 각각 고유 한 색상을 갖기를 바랍니다.
이제 rand ()를 사용하여 RGB 값을 생성하고 모두 다르기를 바랍니다. 이것보다 더 좋은 방법이 있습니까? 예를 들어 (거의) 반복되기 전에 다른 색상을 순환하는 좋은 방법은 무엇입니까?
색상은 항목의 데이터와 일치하지 않아도됩니다. 나는 단지 많은 가치를보고 그들이 인접 해 있기 때문에 그것들이 다르다는 것을보고 싶어합니다.
나는 무언가를 알아낼 수 있지만 이것은 흥미로운 질문이라고 생각합니다. :)
해결책
RGB 색상 모델을 사용하는 것은 좋은 색상 믹스를 얻는 좋은 방법이 아닙니다. 다른 색상 모델을 사용하여 색상을 생성 한 다음 해당 색상 모델에서 RGB로 변환하는 것이 좋습니다.
나는 당신에게 제안합니다 HSV 또는 HSL 대신 컬러 모델, 특히 당신은 색조.
X가 다른 색상 값을 원한다면 360의 스텝 크기로 0에서 360까지 변경하십시오.
다른 팁
당신의 샘플 공간은 무엇입니까 ... 우리가 얼마나 많은 아이템을 말하고 있습니까?
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 범위 입력 슬라이더를 지원하지 않습니다.