Fondu au noir de couleur RGB
Bonjour
Je voudrais commander des LED strips RGB avec un arduino. En entrée j'ai une couleur RGB et une intensité i (disons une valeur entre 0 et 1).
J'aimerais pouvoir utiliser une formule pour trouver la couleur intermédiaire entre le noir et cette couleur RGB qui corresponde à l'intensité i.
J'ai essayé de simplement de multiplier:
R2=R*i
G2=G*i
B2=B*i
mais ça semble modifier la couleur plutôt que de faire une nuance de la couleur originale.
Y a-t-il une formule qui donne vraiment un fondu naturel au noir d'une couleur RGB?
Merci
David
Fondu au noir de couleur RGB
Bonjour, :D
Citation:
Envoyé par
zesinger
... J'ai essayé de simplement de multiplier:
R2=R*i
G2=G*i
B2=B*i
mais ça semble modifier la couleur plutôt que de faire une nuance de la couleur originale.
Y a-t-il une formule qui donne vraiment un fondu naturel au noir d'une couleur RGB? ...
Si le fonctionnement du système ne dépend que d'un seul paramètre (tension d'alimentation ou intensité) tu ne disposes probablement d'aucune possibilité d'agir sur les tentes intermédiaires, à moins de bricoler le circuit.
Les intensités des couleurs seront données par 3 fonctions caractéristiques du montage:
r = Fr(u) ; v = Fv(u) ; b = Fb(u) .
D'autre part, tu ne définis pas ce qu'est un "fondu naturel" allant du noir à une couleur quelconque (r°, v°, b°): dans le domaine [0 ; 255]3 , il y a une infinité de chemins reliant l'origine (0, 0, 0) au point (M°) représentant la couleur considérée.
Si tu es en mesure de programmer les intensités relatives des 3 couleurs en fonction d'un paramètre (t) variant de zéro (pour le noir) à l'unité (lumière maximale), tu peux envisager plusieurs fonctions monotones croissantes:
a) une relation de proportionnalité:
r = Round(r°.t) ; v = Round(v°.t) ; b = Round(b°.t) ,
qui conduit apparemment à un résultat décevant;
b) une relation restreignant le domaine des couleurs sombres, peu attrayantes:
r = Round(r°.Sqrt(t)) ; v = Round(v°.Sqrt(t)) ; b = Round(b°.Sqrt(t)) ;
c) des fonctions linéaires par morceaux, permettant d'introduire une couleur intermédiaire (r1, v1, b1):
r = Round(r1*t/t1) si (t < t1) sinon r = Round(r1 + (r° - r1)*(t - t1)/(1 - t1)) ;
v = Round(v1*t/t1) si (t < t1) sinon v = Round(v1 + (v° - v1)*(t - t1)/(1 - t1)) ;
b = Round(b1*t/t1) si (t < t1) sinon b = Round(b1 + (b° - b1)*(t - t1)/(1 - t1)) ,
avec (t1 << 1), par exemple t1 = 0.1 ou 0.2; c'est à ce stade un choix personnel.
PS1: Il y a aussi une variante (d) favorisant les couleurs les plus lumineuses:
r = Round(r1*Sqrt(t/t1)) si (t < t1) sinon r = Round(r1 + (r° - r1)*(t - t1)/(1 - t1)) , etc
PS2: Désolé de laisser transparaître une ignorance scandaleuse ...
Citation:
Je voudrais commander des LED strips RGB avec un arduino.
qu'est-ce que c'est qu'un arduino ? :help:
Fondu au noir de couleur RGB
Cela va sans dire mais encore beaucoup mieux en le disant, les indices de couleur (r1, v1, b1) sont inférieurs à (r°, v°, b°), mais relativement proches, par exemple en prenant:
r1 = 0.8 * r° ; v1 = 0.8 * v° ; b1 = 0.8 * b° .
Il y a ici trois rapports à choisir.
Fondu au noir de couleur RGB
Citation:
Envoyé par
zedrummer
Bah je n'ai qu'un i qui est l'intensité du son et je voudrais diminuer l'intensité de la couleur RGB en fonction de ce i
Je suppose que la luminosité augmente avec l'intensité sonore (i).
Il te suffit donc de prendre l'une des fonctions qui ont été proposées - si elles te conviennent; il suffit de changer la notation.
Il y a néanmoins deux questions concernant ce programme:
a) souhaites-tu un simple affaiblissement des teintes à partir d'une couleur de luminosité maximale (r°, v°, b°), lorsque faiblit l'intensité sonore (cas précédemment envisagés), ou bien une évolution des couleurs comme l'a indiqué Jipété (:salut:) ? on pourrait alors utiliser d'autres fonctions;
b) y a-t-il trois sortes de diodes, dont les couleurs d'émission correspondent (au moins approximativement) aux couleurs primaires du système (RVB); tu n'a pas décrit le système, mais cela ne devrait soulever qu'une question d'ajustage des fonctions.