Hi Leute, nach dem ich heute hier
http://forum.fhem.de/index.php/topic,22900.0.html (http://forum.fhem.de/index.php/topic,22900.0.html)
gesehen habe (und es auch selber früher gemacht habe), dass Zufällige RGB-Werte nur über
my ($r, $g, $b) = (int(rand(256)), int(rand(256)), int(rand(256)));
generiert werden, möchte ich euch heute eine mMn bessere Möglichkeit für zufällige RGB-Farben anbieten:
Ich nehme die Zufallsfarben aus dem HSV-Raum statt RGB, da sich damit der Zufall besser steuern lässt.
(für genauere Infos siehe: http://de.wikipedia.org/wiki/HSV-Farbraum (http://de.wikipedia.org/wiki/HSV-Farbraum))
sub hsv2rgb {
my ( $h, $s, $v ) = @_;
if ( $s == 0 ) {
return $v, $v, $v;
}
$h /= 60;
my $i = floor( $h );
my $f = $h - $i;
my $p = $v * ( 1 - $s );
my $q = $v * ( 1 - $s * $f );
my $t = $v * ( 1 - $s * ( 1 - $f ) );
if ( $i == 0 ) {
return $v, $t, $p;
}
elsif ( $i == 1 ) {
return $q, $v, $p;
}
elsif ( $i == 2 ) {
return $p, $v, $t;
}
elsif ( $i == 3 ) {
return $p, $q, $v;
}
elsif ( $i == 4 ) {
return $t, $p, $v;
}
else {
return $v, $p, $q;
}
}
my $h=int(rand(360));
my($r,$g,$b) = hsv2rgb($h,1,1);
liefert zB eine zufällige reine Farbe mit voller Sättigung und voller Helligkeit
my $h=int(rand(360));
my $s=rand(1);
my($r,$g,$b) = hsv2rgb($h,$s,1);
liefert eine zufällige Farbe mit zufälliger Sättigung und voller Helligkeit (sehr ähnlich zu dem oben angeführten Beispiel)
und
my $h=int(rand(360));
my $s=rand(1);
my $v=rand(1);
my($r,$g,$b) = hsv2rgb($h,$s,$v);
letztendlich liefert zufällige Farben mit variierender Helligkeit und Sättigung.
Der große Vorteil ist in meinen Augen, dass die Farben viel zufälliger sind, da im HSV-Raum die Farbe ansich nur im Hue-Wert auf einem Kreis von 0-360 liegt.
Hoffe, es kann der eine oder andere von euch brauchen.
lg, Ici
schau mal in Color.pm. da gibt es routinen zur farbraum convertierung. ich denke es ist besser die zu verwenden als eine eigene hsv2rg . im wiki gibt es etwas doku dazu.
gruss
andre
Danke für den Hinweis, kannte ich noch nicht.
Allerdings könnte der Thread vielleicht trotzdem für den einen oder anderen auch noch den Hinweis liefern auf HSV statt RGB für Zufalls-Farben :)