Это пример того, как интерполировать, какие точки лежат между двумя точками. Код для рисования линии очень отличается и намного проще
Этот пример написан на C, но код может быть полезен. im - это изображение, step - это шаг изображения, sx и sy - это величина, которую вы перемещаете вверх / вниз или влево / вправо.
float x=sx, y=sy;
for ( int i=1; i < int(totalLength); i++ ) {
int top = stride*int(y) + int(x),
bot = stride*int(y+1) + int(x);
float xr = x-int(x),
xl = 1-xr,
yt = y-int(y),
yb = 1-yt;
newLine[i]= im[top]*xr*yt +
im[top-1]*xl*yt +
im[bot]*xr*yb +
im[bot-1]*xl*yb;
x+=xgain;
y+=ygain;
}
Получение sx / sy (x1, y1) (x2, y2) - это точки, между которыми вы рисуете ... Код представляет собой python:
totalLength = math.sqrt(math.pow(x2-x1,2) + math.pow(y2-y1,2))
if x1 < x2:
sx,sy,ex,ey=(x1,y1,x2,y2)
else:
sx,sy,ex,ey=(x2,y2,x1,y1)
xgain = float(ex-sx)/totalLength
ygain = float(ey-sy)/totalLength
Следует отметить, что вам нужно вычислить движение x и y для каждого шага, а затем интерполировать, как показано. Чтобы подумать об этом, просто напишите сетку на листе бумаги и посмотрите, где должна быть точка для каждого шага. Нарисуйте рамку размером 1 на 1 пиксель вокруг этой точки.
Этот алгоритм немного упрощается за счет рисования блока размером 1 на 1 пиксель в обратном направлении от этой точки с использованием интерполяции между четырьмя точками сетки, которых касается этот блок. Обратите внимание, что первый пиксель пропускается, поскольку это особый случай. Первый пиксель представляет проблему, так как он может находиться за пределами изображения, и вам необходимо проверить, что вы можете выполнить вычисления, прежде чем выполнять вычисления.