如果我有起点和终点以及颜色,我如何线性插入线条颜色?

How can I linearly interpolate a line color if i have the start and end points and color?

我有起点 (x1, y1) 和终点 (x2, y2),以及它们的颜色存储在 RGBA 中。

我需要在这两个点之间绘制一条渐变填充线,对于沿线的每个点,我可以获得当前 (x, y) 位置,因为它处于递增的 while 循环中。

开始和结束颜色可用 point1.color 和 point2.color。

然后我使用 DrawPoint(Vector(x, y)) 绘制一个点,并在它再次通过循环之前使用 SetColor(RGBA) 设置颜色。

您现有的代码(您在问题中提到的)为这条线绘制的单个点数必须是:

l=max(abs(x2-x1), abs(y2-y1))+1

也就是说,如果线条大部分是垂直方向,则每一行都应该画一个点。如果它主要是水平方向的,那么每一列都应该画一个点。因此,我们可以导出绘制的单个点的总数 l,作为起始坐标和结束坐标之间的最大差值 x/y。这就是您现有代码应该做的。

因此,您事先知道您将要绘制 l 点。这现在变成了每个单独的 rgba 组件之间的简单线性插值。如果 "R1" 是 (x1, y1) 处的 R 分量,而 "R2" 是 (x2, y2) 处的 R 分量:那么在绘制第 i 点时,用 i 从 (x1, y1) 的 0 开始,并在 (x2, y2) 处达到 l,线性插值 R 很简单:

R1+i/l*(R2-R1)

所以,当 i=0 时,这是 R1,当 i=l 时,这是 R2。您必须计算此线性插值:要么使用浮点数学;要么或者先进行整数乘法,然后进行整数除法(假设您的整数精度足以避免乘法期间溢出)。

GBA 成分重复相同的步骤。