J'ai écrit les deux méthodes ci-dessous pour sélectionner automatiquement la N des couleurs distinctes. Il fonctionne par la définition d'une fonction linéaire par morceaux sur le cube RGB. L'avantage de ceci est que vous pouvez également obtenir un barème progressif, si c'est ce que vous voulez, mais quand N devient grand, les couleurs peuvent commencer à ressembler. Je peux aussi imaginer uniformément la subdivision de l'RVB cube en un treillis et en dessinant des points. Quelqu'un sait-il d'autres méthodes? Je me suis écarté de la définition d'une liste, et puis juste à vélo à travers elle. Je dois aussi dire que je n'ai généralement pas de soins si elles se contredisent ou ne sont pas très belles, elles ont juste besoin d'être visuellement distincts.
public static List<Color> pick(int num) {
List<Color> colors = new ArrayList<Color>();
if (num < 2)
return colors;
float dx = 1.0f / (float) (num - 1);
for (int i = 0; i < num; i++) {
colors.add(get(i * dx));
}
return colors;
}
public static Color get(float x) {
float r = 0.0f;
float g = 0.0f;
float b = 1.0f;
if (x >= 0.0f && x < 0.2f) {
x = x / 0.2f;
r = 0.0f;
g = x;
b = 1.0f;
} else if (x >= 0.2f && x < 0.4f) {
x = (x - 0.2f) / 0.2f;
r = 0.0f;
g = 1.0f;
b = 1.0f - x;
} else if (x >= 0.4f && x < 0.6f) {
x = (x - 0.4f) / 0.2f;
r = x;
g = 1.0f;
b = 0.0f;
} else if (x >= 0.6f && x < 0.8f) {
x = (x - 0.6f) / 0.2f;
r = 1.0f;
g = 1.0f - x;
b = 0.0f;
} else if (x >= 0.8f && x <= 1.0f) {
x = (x - 0.8f) / 0.2f;
r = 1.0f;
g = 0.0f;
b = x;
}
return new Color(r, g, b);
}