Опираясь на ответ Майкла Мэдсена -
Для каждой точки в области, которую вы заполняете, вычислите ближайшую точку на отрезке линии. (Вы должны будете погуглить это, но есть множество примеров.) В какой-то момент в вычислении этой ближайшей точки вычисляется значение, которое колеблется от 0 в начальной точке до 1 в конечной точке. Подключите это к любой вашей функции градиента.
Обзор алгоритма в основном ...
pc = # the point you are coloring now
p0 = # start point
p1 = # end point
v = p1 - p0
d = Length(v)
v = Normalize(v) # or Scale(v, 1/d)
v0 = pc - p0
t = Dot(v0, v)
t = Clamp(t/d, 0, 1)
color = (start_color * t) + (end_color * (1 - t))
Вы можете потерять make t / d просто t, если вы масштабируете v на 1 / d ^ 2 вместо 1 / d. Но в любом случае ... Я думаю, это тебя туда доставит. Возможно, очевидно, что первая половина «статична», поэтому вам нужно только зациклить последние четыре строки.