Uma idéia que tenho em mente há um tempo é gerar cores o mais diferentes possível (dentro dos limites) para tantas cores quantas forem necessárias. O problema extra é que, se eu precisar de mais algumas cores posteriormente para o mesmo gráfico (talvez algumas barras extras sejam adicionadas), elas precisam se encaixar no mesmo esquema, mantendo as cores existentes iguais.
A ideia que me surgiu é um truque complicado. Imagine um círculo de cores (talvez cada um com uma tonalidade diferente com a mesma saturação e brilho, embora você possa definir qualquer círculo em qualquer espaço de cor). Em vez de fornecer um ângulo em graus para esse círculo, tenha um intervalo de zero a 255. Em binário, é 00000000 a 11111111. Adicione um a um bit 8 de 255 e ele transborda de volta a zero, para que atue naturalmente como um "valor circular" (em termos técnicos, adição e subtração é módulo 256).
O truque é quando você seleciona a cor zero, a cor um etc., para reverter esses números. Para fazer isso em C, eu usaria ...
value = ((value & 0x0F) << 4) | ((value & 0xF0) >> 4);
value = ((value & 0x33) << 2) | ((value & 0xCC) >> 2);
value = ((value & 0x55) << 1) | ((value & 0xAA) >> 1);
Portanto, a sequência 0, 1, 2, 3, 4 é transformada em 0, 128, 64, 192, 32.
O ponto é que você tem 256 cores distintas, e as primeiras são muito espaçadas, com as mais recentes ficando menos espaçadas e preenchendo as lacunas (64 está na metade do caminho entre 0 e 128, 32 na metade do caminho). entre 0 e 64 etc).
Qualquer largura de bit para um "ângulo" específico funcionará se você adaptar o inverso de bit e, é claro, você poderá executar vários ciclos ao mesmo tempo para diferentes parâmetros da cor (talvez o tom gire rapidamente, mas a saturação gire mais lentamente).
Isso deixa apenas a questão de como você mapeia seus "ângulos" para números RGB específicos ou o que quer que seja, no qual eu não sou especialista - ah, e a questão de saber se o ActionScript suporta manipulação de bits.