【发布时间】:2018-12-10 18:46:51
【问题描述】:
我一直在修改这段代码,试图让这条参数线根据线的长度从洋红色到青色渐变(所以它不会被短线截断,或者也会发生很快在更长的线上)我正在尝试找出公式来找到我要减去的内容,但我似乎无法弄清楚,有什么想法吗?
void ParametricLine(unsigned int _X1, unsigned int _Y1,
unsigned int _X2, unsigned int _Y2)
{
unsigned int lengthX;
unsigned int lengthY;
lengthX = abs((int)_X2 - (int)_X1);
lengthY = abs((int)_Y2 - (int)_Y1);
int longest;
if (lengthX > lengthY)
{
longest = lengthX;
}
else
{
longest = lengthY;
}
unsigned int color = 16711935; //magenta is green 0, others 255
unsigned int magenta = 16711935; //magenta is green 0, others 255
unsigned int cyan = 65535; //cyan is red = 0, G & B are 255
//all 255 = 16777215
unsigned int colorsubtract = (magenta - cyan)/longest;
//MAGENTA: R: 255, G: 0, B: 255
//CYAN: R:0, G: 255, B: 255
for (int i = 0; i < longest; i++)
{
float Ratio = (float)i / longest;
unsigned int CurrY = LERP(_Y1, _Y2, Ratio);
unsigned int CurrX = LERP(_X1, _X2, Ratio);
/*color = LERP(16711935, 65535, longest/65535);*/
if (color > cyan)
color = color - colorsubtract;
else if (color < cyan)
color = cyan;
//interpolate from magenta to cyan
raster[Position(CurrX, floor(CurrY + 0.5))] = color;
}
raster[Position(_X1, _Y1)] = 16777215;
raster[Position(_X2, _Y2)] = 16777215;
}
编辑:这里是供那些询问的人使用的 Lerp 函数-
unsigned int LERP(unsigned int _startval, unsigned int _endval, float _ratio){
return (((int)_endval - (int)_startval) * _ratio + (int)_startval);}
【问题讨论】:
-
什么是 LERP() 函数/宏?您的代码不完整。当部分代码不在这里时,我们应该如何知道您的代码做了什么?
-
好了,这只是一个基本的 Lerp 函数。
标签: c++ colors line linear-gradients