FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Icinger am 21 August 2014, 18:34:58

Titel: Zufällige RGB-Werte aus dem HSV-Raum
Beitrag von: Icinger am 21 August 2014, 18:34:58
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
Titel: Antw:Zufällige RGB-Werte aus dem HSV-Raum
Beitrag von: justme1968 am 21 August 2014, 19:07:56
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
Titel: Antw:Zufällige RGB-Werte aus dem HSV-Raum
Beitrag von: Icinger am 21 August 2014, 19:27:25
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 :)