La meilleure solution lorsqu'un dégradé est requis entre deux couleurs consiste à utiliser la représentation HSV (valeur de saturation de teinte). Si vous avez les valeurs HSV pour vos deux couleurs, vous faites simplement une interpolation linéaire pour H, S et V, et vous avez de belles couleurs (l'interpolation dans l'espace RGB conduit toujours à de "mauvais" résultats).
Vous trouverez également here les formules pour aller de RGB à HSV et de HSV à RGB, respectivement.
Maintenant, pour votre problème avec le coin quatre, vous pouvez faire une combinaison linéaire des quatre valeurs H/S/V, pondérée par la distance de E à quatre que les points A, B, C et D.
EDIT: même méthode que les tekBlues, mais dans l'espace HSV (il est assez facile de le tester dans les espaces RVB et HSV.) Et vous verrez les différences: dans HSV, il suffit de tourner le cylindre chromatique il donne bon résultat)
EDIT2: si vous préférez « rapidité et la simplicité », vous pouvez utiliser une norme L1, au lieu d'une norme L2 (norme euclidienne)
donc, si a
est la taille de la place et la coordonnée de vos points sont A (0
, 0
), B (0
, a
), C (a
, 0
), D (a
, a
), puis la teinte d'un point E (x
, y
) peut être calculé avec:
Hue(E) = (Hue(B)*y/a + Hue(A)*(1-y/a)) * (x/a) + (Hue(D)*y/a + Hue(C)*(1-y/a)) * (1-x/a)
où Hue(A)
est la teinte du point A, Hue(B)
la teinte de B, etc ...
Vous appliquez les mêmes formules pour la saturation et la valeur.
Une fois que vous avez la teinte/saturation/valeur pour votre point E, vous pouvez le transformer en espace RVB.
ça marche, merci beaucoup. Ça a l'air plutôt bien! –
La méthode de combinaison ci-dessus est également appelée "interpolation bi-linéaire". Vous effectuez cela séparément sur les valeurs H, S et V. –