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

时间:2016-10-22 13:35:00

标签: c++ linear-interpolation

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

所以,你事先知道你将会得到l分。现在,这成为每个rgba组件之间的简单线性插值。如果“R1”是(x1,y1)处的R分量,而“R2”是(x2,y2)处的R分量:则在绘制i点时,il开始对于(x1,y1)为0,并且在(x2,y2)处达到R1+i/l*(R2-R1) ,线性插值的R只是:

i=0

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

BAregister_user()组件进行泡沫,冲洗并重复相同的过程。