La mejor solución cuando se requiere un degradado entre dos colores es utilizar la representación HSV (valor de saturación de tono).
Si tiene los valores HSV para sus dos colores, solo hace interpolación lineal para H, S y V, y tiene bonitos colores (la interpolación en el espacio RGB siempre conduce a resultados "malos").
También encontrará here las fórmulas para pasar de RGB a HSV y de HSV a RGB, respectivamente.
Ahora, para su problema con los cuatro esquina, se puede hacer una combinación lineal de los valores de cuatro H/S/V, ponderada por la distancia de E a que los cuatro puntos A, B, C y D.
EDITAR: el mismo método que tekBlues, pero en el espacio HSV (es bastante fácil probarlo en RGB y en espacios HSV. Y verá las diferencias. En HSV, simplemente da la vuelta al cilindro cromático, y esta es la razón por la cual que da buen resultado)
Edit2: si lo prefiere "velocidad y simplicidad", es posible utilizar una L1-norma, en lugar de una L2-norma (norma euclidiana)
lo tanto, si a
es el tamaño de su cuadrado y la coordenada de sus puntos son A (0
, 0
), B (0
, a
), C (a
, 0
), D (a
, a
), entonces el Hue de un punto E (x
, y
) se puede calcular con:
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)
donde Hue(A)
es la tonalidad del punto A, Hue(B)
Hue de la B, etc ...
Aplica las mismas fórmulas para la saturación y el valor.
Una vez que tenga el Tono/Saturación/Valor para su punto E, puede transformarlo en un espacio RGB.
Obtuve para que funcione, muchas gracias. ¡Se ve muy bien también! –
El método de combinación anterior también se conoce como "interpolación bi-lineal". Lo está haciendo por separado en los valores H, S y V. –