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