如何计算四个色渐变?(How do I calculate a four colour gradie

2019-06-25 13:01发布

如果我在一个正方形的四个角有四个颜色(A,B,C&d),我想,以填补与四种颜色之间的融合很好我会如何计算E点的颜色梯度方?

越接近E是任何其他点的,强烈的那种颜色应该影响的结果。

任何想法如何做到这一点? 速度和简单优选精度。

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

Answer 1:

当两种颜色之间是必需的梯度最好的解决方案,是使用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( 00 ),B( 0a ),C( a0 ),d( aa ),则色调的,一个点E( xy )可以计算与:

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空间变换它。



Answer 2:

看看这个网站,这给@ ThibThib的评论说,“在HSV梯度将更加satifying”的视觉演示:

http://www.perbang.dk/rgbgradient/

这是一个梯度的创造者,将创建并同时显示的RGB梯度和HSV梯度。

如果试图从FFAAAA到AAFFAA 9级(淡红色变为绿色),你会通过淡黄色得到一个很好的过渡,而HSV和RGB那些看起来相似。

但尝试从FF0000 9个步骤00FF00(加粗红色到绿色),你会看到通过一个恶心的绿褐色的RGB一个过渡。 该HSV梯度,然而,转换通过大胆的黄色。



Answer 3:

  1. 确定每个点A点E的距离,B,C,d
  2. 颜色为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(红,绿,蓝)



文章来源: How do I calculate a four colour gradient?