Pergunta

Eu quero desenhar alguns dados em uma textura: muitos itens em uma fileira. Eles não são criados em ordem, e todos eles podem ter tamanhos diferentes (pense em uma pilha de memória). Cada item de dados é um pequeno retângulo e eu quero ser capaz de diferenciá-los, então eu gostaria que cada um deles tem uma única cor.

Agora, eu poderia apenas usar rand () para gerar valores RGB e espero que eles são todos diferentes, mas eu suspeito que não vai conseguir uma boa distribuição no espaço RGB. Existe uma maneira melhor do que este? Por exemplo. o que é uma boa maneira de ciclismo através de diferentes cores antes que (quase) repetir?

As cores não tem que combinar com qualquer dados nos itens. Eu só quero ser capaz de olhar para muitos valores e ver que eles são diferentes, como eles são adjacentes.

Eu poderia descobrir alguma coisa, mas eu acho que essa é uma pergunta interessante. :)

Foi útil?

Solução

Usando o modelo de cores RGB não é uma boa maneira de obter uma mistura boa cor. É melhor usar um outro modelo de cor para gerar sua cor, e depois converter de que o modelo de cor para RGB.

Eu sugiro que você o HSL modelo de cor HSV ou em vez disso, em particular você quiser variar o Hue .

Se você quiser valores de cor X diferentes, variam-los 0-360 com um tamanho de passo de 360 ??dividido por X.

Outras dicas

Em RGB geral não é um grande espaço de cor para fazer esses tipos de coisas porque é perceptivelmente não-linear, para começar. Isto significa que distâncias iguais movidos entre trigêmeos RGB não parecem igualmente diferente para nossos olhos.

eu provavelmente trabalho no L * c * h * espaço ( ver o espaço também ), ou espaço HSL , e apenas gerar um espaçamento uniforme na matiz. Estes espaços foram projetados para ser de aproximadamente perceptivamente linear.

Qual é o seu espaço amostral ... quantos itens que estamos falando.

Você pode construir-se uma série de RGB triplica a partir

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

Então randomise sua lista e iterate através dele. que lhe daria 16 ^ 3 (4096) cores diferentes antes de uma cor repetido.

Google "delta e cie 2000"; a fórmula de diferença de cor é útil para determinar a distância aparente (visual) entre 2 cores. . (Em um monitor;. Não há uma fórmula diferente para pigmentos) Ela opera em cores no espaço Lab (adereços para Simon), mas aplica-se um cálculo de percepção de diferença

Nós descobrimos que um número cerca de 1,5 foi suficiente para garantir visualmente distintas cores (ou seja, você pode dizer a diferença se eles estão perto um do outro), mas se você quiser identificável cores (você pode encontrar qualquer cor em uma lenda) que você precisa para bater isso.

Como para a criação de um conjunto de cores ... eu provavelmente começar em algum canto do espaço Lab, e andar em torno dele usando um tamanho de passo que dá diferenças visuais bastante grandes (nota: não é linear, assim tamanho do passo será provavelmente terá que ser adaptável) e depois embaralhar a lista.

Isto é muito semelhante ao problema de quatro cores relativas aos mapas para colorir, isso pode render algumas soluções interessantes para você:

quatro cores teorema

Se você só precisa de um conjunto de cores perceptualmente-distintas (e não um algoritmo para gerá-los) Eu criei uma ferramenta gratuita no meu site que faz exatamente isso:
http://phrogz.net/css/distinct-colors.html

Em vez de apenas usando o mesmo espaçamento em RGB ou espaço HSV (que não são uniformemente distribuídas no que diz respeito à percepção humana) a ferramenta permite gerar uma grade de valores no espaço HSV e, em seguida, usa o CMC (I: c) padrão para a distância de cor para jogar fora as cores que são perceptualmente muito próximos uns dos de outros. (O controle deslizante 'limiar' na segunda aba permite que você controle como visualmente distinta as cores devem ser, mostrando-lhe os resultados em tempo real.)

No final, você pode classificar sua lista de cores geradas por vários critérios, e depois uniformemente 'Shuffle' que lista para que você está garantido para ter valores visualmente distintas adjacentes uns aos outros na lista. (Eu recomendo um valor de 'Intercalar' de cerca de 5).

Como desta escrita a ferramenta funciona bem com o Chrome, Safari e (via um calço) Firefox; O IE9 não suporta controles deslizantes de entrada de gama HTML5, que os usos UI extensivamente para exploração interativa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top