Существуют различные формы уравнений для линии, одним из наиболее знакомых из которых является y=m*x+b
. Теперь, если m=dy/dx
и c = dx*b
, то dx*y = dy*x + c
. Запись f(x) = dy*x - dx*y + c
означает, что f(x,y) = 0
если (x,y)
- точка на данной линии.
Если вы продвинетесь на x
одну единицу, f(x,y)
изменится на dy
; если вы продвигаетесь на y
одну единицу, f(x,y)
изменяется на dx
.
В вашем коде err
представляет текущее значение линейного функционала f(x,y)
и последовательности операторов
err = err - dy;
x1 = x1 + sx;
и
err = err + dx;
y1 = y1 + sy;
представляет собой продвижение x
или y
на одну единицу (в направлении sx
или sy
) с последующим воздействием на значение функции. Как отмечалось ранее, f(x,y)
- ноль для точек на линии; это положительно для точек на одной стороне линии, и отрицательно для тех, с другой. Тесты if
определяют, будет ли продвижение x
оставаться ближе к желаемой линии, чем продвижение y
, или наоборот, или оба.
Инициализация err = dx - dy;
предназначена для минимизации ошибки смещения; если вы взорвете свой масштабный график, вы увидите, что ваша вычисленная линия может не центрироваться на нужной линии с различными инициализациями.