C++ 如果我有起点和终点以及颜色,如何线性插值线颜色?
我有开始(x1,y1)和结束(x2,y2),以及它们的颜色存储在RGBA中 我需要在这两个点之间画一条渐变填充线,对于这条线上的每个点,我可以得到当前(x,y)的位置,因为它在一个递增的while循环中 起始颜色和结束颜色分别为point1.color和point2.colorC++ 如果我有起点和终点以及颜色,如何线性插值线颜色?,c++,linear-interpolation,C++,Linear Interpolation,我有开始(x1,y1)和结束(x2,y2),以及它们的颜色存储在RGBA中 我需要在这两个点之间画一条渐变填充线,对于这条线上的每个点,我可以得到当前(x,y)的位置,因为它在一个递增的while循环中 起始颜色和结束颜色分别为point1.color和point2.color 然后,我使用DrawPoint(向量(x,y))绘制一个点,并在它再次通过循环之前使用SetColor(RGBA)设置颜色。现有代码(您在问题中提到的)为这条线绘制的单个点的数量必须是: l=max(abs(x2-x1)
然后,我使用DrawPoint(向量(x,y))绘制一个点,并在它再次通过循环之前使用SetColor(RGBA)设置颜色。现有代码(您在问题中提到的)为这条线绘制的单个点的数量必须是:
l=max(abs(x2-x1), abs(y2-y1))+1
也就是说,如果直线的方向基本上是垂直的,那么每一行都应该画一个点。如果它大部分是水平方向的,那么在每一列中都应该画一个点。因此,我们可以推导出绘制的单个点的总数,l
,作为起点和终点x/y坐标之间的最大差值。这就是现有代码应该做的
因此,您提前知道您将绘制l
点。这现在成为每个r
、g
、b
和a
组件之间的简单线性插值。如果“R1”是(x1,y1)处的R分量,“R2”是(x2,y2)处的R分量:那么当绘制i
第th点时,对于(x1,y1)而言i
从0开始,在(x2,y2)处到达l
,线性插值的R仅为:
R1+i/l*(R2-R1)
所以,当i=0时,这是R1,当i=l时,这是R2。必须计算此线性插值:或者使用浮点数学;或者先进行整数乘法,然后进行整数除法(假定整数精度足以避免乘法过程中溢出)
对
G
、B
和A
组件进行起泡、冲洗并重复相同的过程。现有代码(您在问题中提到的)为此线绘制的单个点数必须为:
l=max(abs(x2-x1), abs(y2-y1))+1
也就是说,如果直线的方向基本上是垂直的,那么每一行都应该画一个点。如果它大部分是水平方向的,那么在每一列中都应该画一个点。因此,我们可以推导出绘制的单个点的总数,l
,作为起点和终点x/y坐标之间的最大差值。这就是现有代码应该做的
因此,您提前知道您将绘制l
点。这现在成为每个r
、g
、b
和a
组件之间的简单线性插值。如果“R1”是(x1,y1)处的R分量,“R2”是(x2,y2)处的R分量:那么当绘制i
第th点时,对于(x1,y1)而言i
从0开始,在(x2,y2)处到达l
,线性插值的R仅为:
R1+i/l*(R2-R1)
所以,当i=0时,这是R1,当i=l时,这是R2。必须计算此线性插值:或者使用浮点数学;或者先进行整数乘法,然后进行整数除法(假定整数精度足以避免乘法过程中溢出)
对
G
、B
和A
组件进行起泡、冲洗并重复相同的过程。您知道线性插值是如何工作的吗?您已经尝试过了吗?另外,您使用什么特定的图形库?那不是标准C++的东西。我粗略地了解线性插值是如何工作的,但我还在学习。至于图书馆,它是提供给我的。我没有尝试任何成功的方法,但是我又一次对C++进行了新的尝试。GilfoyMayhew,你的问题是不太可能在第一的地方使用C++。我知道我要获取当前点的x,y点,然后用这个在开始和结束颜色之间选择RGB颜色。你知道线性插值是如何工作的吗?你已经试过了吗?另外,您使用什么特定的图形库?那不是标准C++的东西。我粗略地了解线性插值是如何工作的,但我还在学习。至于图书馆,它是提供给我的。我没有尝试任何成功的方法,但是我又一次对C++进行了新的尝试。GilfoyMayhew,你的问题是不太可能在第一的地方使用C++。我知道我要取当前点的x,y点,然后用这个来选择开始和结束颜色之间的RGB颜色。