Desidero avere un metodo statico, che ogni volta chiamato restituirà un valore di colore che non è ancora visualizzato e non è troppo vicino all'ultimo colore restituito (ad esempio return new Color(last_value += 10)
non lo farò). Inoltre, non dovrebbe essere casuale, quindi ogni volta che l'applicazione viene avviata, la sequenza dei colori restituiti sarebbe la stessa.Algoritmo per la generazione di valori di colore RGB non ripetuti, distanziati
La prima cosa che mi è venuta alla mia testa, è quello di iterare su un array con un passo numero di primordiale, qualcosa di simile:
private static HashMap<Integer, Boolean> used = new HashMap<>();
private static int[] values = new int[0xfffff]; // 1/16th of possible colors
private static int current = 0, jump = values.length/7;
public static Color getColour(){
int value = values[current];
used.put(current, true);
current += jump;
current %= values.length;
//have some check here if all colors were used
while (used.containsKey(current)){
current++;
current%=values.length;
}
return new Color(value);
}
Ma non mi piace che, dal momento che i colori saranno vicini l'uno altro da alcune chiamate indietro.
come si definisce esattamente la vicinanza per lo schema di colori RGB? – svs
perché non hai bisogno di un colore casuale? penso che a un certo punto devi usare casualmente. – Priyamal
@svs Bene in termini in cui i colori sono distinti l'uno dall'altro semplicemente osservandoli, e allo stesso tempo consistono in pallete larghe, quindi non è tutto solo ad es. rosso. –