Math 如何生成具有多个颜色停止的线性渐变?

Math 如何生成具有多个颜色停止的线性渐变?,math,colors,interpolation,gradient,Math,Colors,Interpolation,Gradient,假设我需要三种颜色之间的线性渐变。 rgb(255, 000, 000) rgb(255, 255, 000) rgb(000, 255, 000) 如何计算给定长度的单线上的线性插值?下面是一句简单的话。 rgb(255, 000, 000) rgb(255, 255, 000) rgb(000, 255, 000) 在给定颜色停止列表/数组的情况下,如何创建一个函数,从输入输出另一个包含所有插值颜色值的数组 上面的图像对我来说是可用的,但我需要能够在输入长度上生成具有多个颜色停止的RG

假设我需要三种颜色之间的线性渐变。

rgb(255, 000, 000)
rgb(255, 255, 000)
rgb(000, 255, 000)
如何计算给定长度的单线上的线性插值?下面是一句简单的话。

rgb(255, 000, 000)
rgb(255, 255, 000)
rgb(000, 255, 000)

在给定颜色停止列表/数组的情况下,如何创建一个函数,从输入输出另一个包含所有插值颜色值的数组

上面的图像对我来说是可用的,但我需要能够在输入长度上生成具有多个颜色停止的RGB阵列

,另一个选项是一个函数,用于返回基于颜色停止数组和沿直线的点的单个颜色样本

该函数看起来像:
sample(停止[rgb…],点,长度)

我试了几次,但还是放弃了,因为我不知道如何开始。我试着从三个不同的色带的角度来看它,但它仍然不太匹配

我知道这是一个简单的数学大脑阻塞的例子,这不是一个真正的编程问题,但我不知道还能问什么


p.S:任何一种合理合理的编程语言的答案都可以。不过,不要试图给出类似正则表达式模式的答案。

您应该在给定的间隔内对每个颜色分量进行线性插值

让我们有N个区间,所以N+1个节点。节点包含范围为0..1和RGB颜色的位置

RGBColor NodeColors[N+1]
Double NodePositions[N+1]
要在距离起始点给定距离处获得颜色,必须确定间隔数K

若线条绘制从开始到结束,只需将当前距离与节点位置条目进行比较,并在需要时增加K

DistNorm = Dist / Length;

while (DistNorm > NodePositions[K])
    K++
如果要获取直线上的任意点,请使用二进制搜索

  K = BinarySearch(DistNorm, NodePositions)
得到区间数后,计算该区间的线性插值

 Red = NodeColors[K].Red + 
      (NodeColors[K+1].Red - NodeColors[K].Red) * 
      (DistNorm - NodePositions[K]) / 
      (NodePositions[K+1] - NodePositions[K]) 
same for Green, Blue

应该以给定的间隔对每个颜色分量进行线性插值

让我们有N个区间,所以N+1个节点。节点包含范围为0..1和RGB颜色的位置

RGBColor NodeColors[N+1]
Double NodePositions[N+1]
要在距离起始点给定距离处获得颜色,必须确定间隔数K

若线条绘制从开始到结束,只需将当前距离与节点位置条目进行比较,并在需要时增加K

DistNorm = Dist / Length;

while (DistNorm > NodePositions[K])
    K++
如果要获取直线上的任意点,请使用二进制搜索

  K = BinarySearch(DistNorm, NodePositions)
得到区间数后,计算该区间的线性插值

 Red = NodeColors[K].Red + 
      (NodeColors[K+1].Red - NodeColors[K].Red) * 
      (DistNorm - NodePositions[K]) / 
      (NodePositions[K+1] - NodePositions[K]) 
same for Green, Blue