Заключается в решении дифференциального уравнения, описывающего процесс разложения отрезка в растр. Где x1, y1, x2, y2 — концы разлагаемого отрезка, а yi — начальное значение для очередного шага (вдоль отрезка). Т.е. получаем рекуррентное соотношение для последовательности значений y. В простом ЦДА — большее из приращений (Dx или Dy) выбирается в качестве единицы растра. Алгоритм следующий:
аппроксимируем длину отрезка
if abs(x2 — x1) ? abs(y2 — y1) then
Длина = abs(x2 — x1)
else
Длина = abs(y2 — y1)
end if
полагаем большее из приращений Dx или Dy равным единице растра
D x = (x2 — x1)/Длина
D y = (y2 — y1)/Длина
округляем величины, а не отбрасываем дробную часть
использование знаковой функции делает алгоритм пригодным для всех квадрантов
x = x1 + 0.5?Sign(D x)
y = y1 + 0.5?Sign(D y)
начало основного цикла
I = 1
while (I ? Длина)
Plot (Integer(x), Integer(y))
x = x + D x
y = y + D y
I = I + 1
end while
finish
Примечание! Имеется предположение, что точки (x1,y1) и (x2,y2) — не совпадают. Здесь — функция Integer — функция преобразования вещественного числа в целое, путем округления, а не отбрасывания дробной части!!! Функция Sign — возвращает -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно.
