如果我在一个正方形的四个角有四个颜色(A,B,C&d),我想,以填补与四种颜色之间的融合很好我会如何计算E点的颜色梯度方?
越接近E是任何其他点的,强烈的那种颜色应该影响的结果。
任何想法如何做到这一点? 速度和简单优选精度。
颜色http://rabien.com/image/colours.png
如果我在一个正方形的四个角有四个颜色(A,B,C&d),我想,以填补与四种颜色之间的融合很好我会如何计算E点的颜色梯度方?
越接近E是任何其他点的,强烈的那种颜色应该影响的结果。
任何想法如何做到这一点? 速度和简单优选精度。
颜色http://rabien.com/image/colours.png
当两种颜色之间是必需的梯度最好的解决方案,是使用HSV表示(色调饱和度值)。
如果你有你的两种颜色的HSV值,你只需进行线性插值H,S和V,和你有漂亮的色彩(RGB中的空间插值总是导致“坏”的结果)。
您还可以找到这里的公式去从RGB到HSV和HSV到RGB分别。
现在,您的问题,与所述四个角,可以使四个H / S / V值的线性组合,基于E的距离加权到四点A,B,C和D.
编辑:比tekBlues同样的方法,但在HSV空间(这是很容易测试它在RGB和HSV空间,你会看到差别。在HSV,你只是把色筒周围,这就是为什么它给人。好的结果)
EDIT2:如果你喜欢“速度和简单”,则可以使用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)
其中Hue(A)
是点A的色相, Hue(B)
B的色调,等...
您申请的饱和度和相同的公式。
一旦你有你的E点色相/饱和度/值,您可以在RGB空间变换它。
看看这个网站,这给@ ThibThib的评论说,“在HSV梯度将更加satifying”的视觉演示:
http://www.perbang.dk/rgbgradient/
这是一个梯度的创造者,将创建并同时显示的RGB梯度和HSV梯度。
如果试图从FFAAAA到AAFFAA 9级(淡红色变为绿色),你会通过淡黄色得到一个很好的过渡,而HSV和RGB那些看起来相似。
但尝试从FF0000 9个步骤00FF00(加粗红色到绿色),你会看到通过一个恶心的绿褐色的RGB一个过渡。 该HSV梯度,然而,转换通过大胆的黄色。
颜色为E点会红/绿/蓝的组合。 计算每种颜色轴作为平均通过距离A,B,C,d,ponderating相同颜色轴的。
distance_a = SQRT((XA-XE)^ 2 +(YA-YE)^ 2)
distance_b = ....
sum_distances = distance_a + distance_b ...
红色=(red_a distance_a + red_b distance_b ...)/ sum_distances
color_E = ColorFromARgb(红,绿,蓝)