Hallo Freunde des gehobenen Forumsgenusses,
Ich habe jetzt den Code kommentiert und den Variablen aussagekräftigere Namen gegeben.
„sich möglichst gut voneinander abheben“ heißt, dass ich Punkte auf eine weise Fläche malen möchte und Normalsterbliche diese Punkte einigermaßen auseinander halten bzw. einer Liste mit Farben zuordnen können sollen.
function get_colors($number) {
$root = pow($number, 1/3);
if (ceil($root)*pow(floor($root), 2) >= $number) {
$red_number = ceil($root);
$green_number = $blue_number = floor($root);
}
elseif (pow(ceil($root), 2)*floor($root) >= $number) {
$red_number = $green_number = ceil($root);
$blue_number = floor($root);
}
else
$red_number = $green_number = $blue_number = ceil($root);
/*
Dieser Teil der Funktion ermittelt für jeden Farbkanal einzeln, in wie viele Teile die 255 Werte
des jeweiligen Farbkanals mindestens zerlegt werden müssen, damit die Funktion die geforderte Anzahl
Farben durch Permutationen erzeugen kann.
*/
$counter = 0;
$result = array();
for ($red_counter = 0; $red_counter <= $red_number; $red_counter++) {
for ($green_counter = 0; $green_counter <= $green_number; $green_counter++) {
for ($blue_counter = 0; $blue_counter <= $blue_number; $blue_counter++) {
if ($counter >= $number)
return $res;
$res[] = array('r' => $red_counter*floor(255/$red_number), 'g' => $green_counter*floor(255/$green_number), 'b' => $blue_counter*floor(255/$blue_number));
$counter++;
/*
Dieser Teil berechnet die Permutationen und bricht ab, wenn genügend erzeugt wurden.
*/
}
}
}
}
Gruß
Alexander Brock