Le vrai problème, c'est la méthode.
Il faut bien voir que la discrétisation des grandeurs, leur réduction à leur approximation entière entraîne une perte d'information sur la connaissance des teintes locales, et une dégradation irréversible des calculs et de la continuité des couleurs et des dessins.
Tu ne peux donc pas déduire les colorations du cercle chromatique de celles du rectangle. Les deux palettes, pour lesquelles interviennent 5 séries de variables entières - coordonnées (x, y) et composantes (r, v, b) de chaque pixel - doivent au contraire représenter la traduction graphique d'une unique fonction de deux variables, ne faisant intervenir des paramètres réels, sans dimension et si possible au plus égaux à l'unité.
a) Les deux variables à envisager sont ici une distance relative (L) comprise entre zéro et l'unité, et la teinte (T) qui varie entre 0 et 360°.
b) Il intervient par ailleurs deux constantes (L1, L2) vérifiant L1 + L2 = 1
ainsi que la loi de variation des couleurs à la frontière des deux domaines, sur laquelle la saturation prend sa valeur maximale (S = 1): cette loi s'exprime par la donnée de 3 fonctions variant sur le domaine [0 ; 1], dépendant de la teinte:
Rpal(t) , Vpal(t) , Bpal(t)
et qui représentent les intensités relatives de chaque couleur fondamentale pour la palette considérée.
c) Chaque pixel doit être initialement considéré comme un vecteur de [0 ; 1]3 à 3 composantes réelles comprises entre 0 et 1, ce qui revient à considérer les images comme des champs de vecteurs
C'est à la fin du calcul qu'apparaîtront les composantes (tant) attendues:
r = Round(255*Fr(M)) ; v = Round(255*Fv(M)) ; b = Round(255*Fb(M))
Je crois entendre un grand soupir de soulagement
1°) Cas de la palette rectangulaire: l'image est caractérisée par ses dimensions - largeur (La), hauteur (Ha) - la position de chaque pixel par ses coordonnées (Xm, Ym), qui vérifient:
0 <= Xm < La , 0 <= Ym < Ha
Une relation très simple intervient entre la teinte et l'abscisse: t = 360*Xm/(La - 1) ;
elle est nulle à la limite gauche de l'image (Xm = 0) et maximale à droite (Xm = La - 1) .
a) Dans la partie inférieure sombre, caractérisée par Ym < L2*Ha , les composantes des couleurs sont proportionnelles à l'ordonnée du point considéré, soit en introduisant la valeur limite Lim = L2*Ha
Fr(Xm, Ym) = (Ym/Lim)*Rpal(t) , Fv(Xm, Ym) = (Ym/Lim)*Vpal(t) , Fb(Xm, Ym) = (Ym/Lim)*Bpal(t) ;
ces trois égalités sont implicitement contenues dans la relation vectorielle:
Q(Xm, Ym) = (Ym/Lim).Qref
dans laquelle le vecteur de référence admet pour composantes: Qref = (Rpal(t) , Vpal(t) , Bpal(t)) .
b) Dans la partie supérieure claire (Ym >= Lim), les couleurs évoluent progressivement jusqu'au blanc (vecteur Q111 = (1, 1, 1) par la relation linéaire:
Q(Xm, Ym) = (Ym - Lim)/(Ha - 1 - Lim)*Q111 + (Ha - 1 -Ym)/(Ha - 1 - Lim)*Qref
qui se traduira par 3 relations équivalentes:
Fr(Xm, Ym) = (Ym - Lim)/(Ha - 1 - Lim) + (Ha - 1 -Ym)/(Ha - 1 - Lim)*Rpal(t)
Fv(Xm, Ym) = (Ym - Lim)/(Ha - 1 - Lim) + (Ha - 1 -Ym)/(Ha - 1 - Lim)*Vpal(t)
Fb(Xm, Ym) = (Ym - Lim)/(Ha - 1 - Lim) + (Ha - 1 -Ym)/(Ha - 1 - Lim)*Bpal(t)
2°) Cas de la palette circulaire: elle est caractérisée par le rayon maximal du cercle (Rmax) et les coordonnées de son centre:
Xc = (La - 1)/2 , Yc = (Ha - 1)/2 .
On peut à partir de ces données passer aux coordonnées relatives, qui donnent accès à l'angle polaire du vecteur (CM) ainsi qu'à sa norme (r):
Dx = Xm - Xc ; Dy = Ym - Yc ; r = (Dx2 + Dy2)1/2 ; A = ArgXY2(Dx, Dy) .
L'expression de la teinte est immédiate: T = 360*A/(2*Pi) = (180/Pi)*A .
L'influence de la distance (r) s'exprime comme dans le cas précédent par une fonction continue linéaire en 2 morceaux.
Partager