如何计算四色渐变?

Rol*_*ien 14 graphics drawing gradient colors

如果我在一个正方形的四个角上有四种颜色(A,B,C和D),并且我想用一个在四种颜色之间很好地融合的渐变填充那个正方形,我将如何计算点E的颜色?

E越接近任何其他点,颜色应该强烈影响结果.

知道怎么做吗?速度和简单性比准确性更好.

颜色http://rabien.com/image/colours.png

Thi*_*hib 23

当两种颜色之间需要渐变时,最佳解决方案是使用HSV表示(色调饱和度值).

如果您有两种颜色的HSV值,则只需对H,S和V进行线性插值,并且颜色很好(RGB空间中的插值总会导致"坏"结果).

您还可以在这里找到分别从RGB到HSV以及从HSV到RGB的公式.

现在,对于四角的问题,您可以对四个H/S/V值进行线性组合,加权距离E到四个点A,B,C和D.

编辑:与tekBlues相同的方法,但在HSV空间(在RGB和HSV空间中测试它很容易.你会看到差异.在HSV中,你只需转动彩色圆柱体,这就是它给出的原因好结果)

编辑2:如果你更喜欢"速度和简单",你可以使用L1范数,而不是L2范数(欧几里德范数)

因此,如果a你的方形的大小和你的点的坐标是A(0,0),B(0,a),C(a,0),D(a,a),那么点E(x,y)的色调可以用:

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)
Run Code Online (Sandbox Code Playgroud)

这里Hue(A)是A点的色调,Hue(B)B的色调,等...

您为饱和度和值应用相同的公式.

获得点E的色相/饱和度/值后,可以在RGB空间中对其进行变换.