PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   gute Zufallsfarben (http://www.selfphp.de/forum/showthread.php?t=25944)

tsunamitsunami 24.10.2016 17:29:02

gute Zufallsfarben
 
Hallo,
ich möchte eine Grafik generieren. Einfach eine Kreisdiagramm mit den Kosten der jeweiligen Abteilung. Die Anzahl de abteilungen kann schwanken. Also mal 5, mal 20 und mal 18 Abteilungen.
Ich kann natürlich einfach rand(0,255) nehmen. Nur dann kann es passieren, dass ich 3 Rottöne habe und 12 Blautöne, was nicht schön aussieht.
Ich bräuchte also etwas mit genügend Abstand.

Ich habe einen Ansatz:

PHP-Code:

<?php  $rgb_array=array(0,0,0);
$zeiger=3;
$anzahl_abteilungen=12;
$quotient=round(256/(3*$anzahl_abteilungen));

//********Quotient=7

        
for($x=0;$x<256;$x=$x+$quotient)
        {          
        
$pos=$zeiger%3;
        
        
//*******Pos:0
        
        
$zeiger++;
        
        
//*********Zeiger=4
        
        
echo "Position: ".$pos." - Wert. ".$rgb_array[$pos]."<br>";
        
//*********** Wert an Pos 0 
         
$rgb_array[$pos]= $rgb_array[$pos]+$quotient;
         
         
//************** Wert an Pos 0=7
        
}
        
//**********Kreisdiagramm******************
  
    
    
....
    
?>

Nur dann habe ich
0,0,0,
7,7,7
14,14,14...

Was ich vom Gefühl her bräuchte:
0,0,0
7,0,0
0,7,0
0,0,7
Als Test habe ich 12 Abteilungen, 256/12 =21 /3 Farben =7 als Quotient. Rot oder Grüntöne können natürlich mehrere sein und müssen bei entsprechender Anzahl auch sein (max 50 würde ich sagen), aber halt nicht nebeneinander. Soll ja kein Farbverlauf werden.
Sonst passiert sowas:

http://screencast.com/t/hv5B4DwfZ0K

Und sowas wäre gut:
http://screencast.com/t/FwEmxpryt6

vt1816 25.10.2016 15:01:26

AW: gute Zufallsfarben
 
Habe zwar nicht die einzig wahre Lösung, würde jedoch - wenn es um eine begrenzte Anzahl von Farben geht - mir die Mühe machen, neben den Grundfarben (Rot, Grün, Blau, Cyan, Magenta, Gelb, Weiß und Schwarz) noch eine beliebige Anzahl von selbst gewählten Farben als Strings in ein Array schreiben (zb. $color = array("0,0,0", ..., Wunschfarben, ... "255,255,255")) und bei Bedarf die benötige Anzahl von Elementen abfragen.

Vorteil: Du kannst die Farben nach Deinen Vorstellungen auswählen und auch sortieren.

Oder Du schaust Dir mal die einschlägigen Bibliotheken, die Diagramme mittels PHP zeichnen (können), an.

tsunamitsunami 25.10.2016 15:21:48

AW: gute Zufallsfarben
 
Vielen Dank!

Das habe ich auch schon gedacht. Allerdings habe ich dasselbe Problem, oder?
Angenommen, ich nehme 150 Farben als Array.
Dann brauche ich 12. Entweder hole ich mir 12 zufällige raus oder die ersten 12.

Was ich suche oder mir vorschwebt ist sowas wie.
$altefarbe=irgendeinehexzahl;
$neuefarbe=$irgendeinehexzahl
wenn $neuefarbe-$altefarbe <= 45 (Abstzamd) wähle andere farbe, sonst mache nichts.
Das also zwischen den Zahlen genug Abstand ist.
Oder OK, festlegen. Mehr als 100 werden es nie. Nur dann muss ich die Farben händisch im String/Array sortieren. Sonst habe ich uU zb 0,0,255 neben 5,10,245 und das sieht kein Mensch als Unterschied. Oder sowas wie Komplementärdarben. So dass man quasi 2 Arrays hat und dann immer wechselt...

tsunamitsunami 25.10.2016 18:26:08

AW: gute Zufallsfarben
 
Ich habe nun eine Funktion gefunden:
PHP-Code:

function hex2rgb($hex) {
   
$hex str_replace("#"""$hex);

   if(
strlen($hex) == 3) {
      
$r hexdec(substr($hex,0,1).substr($hex,0,1));
      
$g hexdec(substr($hex,1,1).substr($hex,1,1));
      
$b hexdec(substr($hex,2,1).substr($hex,2,1));
   } else {
      
$r hexdec(substr($hex,0,2));
      
$g hexdec(substr($hex,2,2));
      
$b hexdec(substr($hex,4,2));
   }
   
$rgb = array($r$g$b);
   
//return implode(",", $rgb); // returns the rgb values separated by commas
   
return $rgb// returns an array with the rgb values


Aber nun habe ich ein Array mit RGB Werten. Implode macht mir daraus einen String. Ich brauche das auber doch als dezimal werte...

tsunamitsunami 26.10.2016 12:54:31

AW: gute Zufallsfarben
 
Ok, habs mit ner Krücke gelöst. 30 Farbzahlen manuell in ein Array geschrieben und dabei auf die Reihenfolge geachtet.

Eigendlich suhe ich noch was eleganteres. Startfarbe, was weiß ich fffff und Komplemenärfarbe +30/50/56
Das als neue farbe usw.


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:34:33 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.