Загрузка...

Метод цифрового дифференциального анализатора (ЦДА)


Заключается в решении дифференциального уравнения, описывающего процесс разложения отрезка в растр. Где 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 для отрицательного, нулевого и положительного аргумента соответственно.

Загрузка...