Zufällige RGB-Werte aus dem HSV-Raum

Begonnen von Icinger, 21 August 2014, 18:34:58

Vorheriges Thema - Nächstes Thema

Icinger

Hi Leute, nach dem ich heute hier

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)

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
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Icinger

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 :)
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho