На этом шаге мы рассмотрим простейший алгоритм закрашивания.
Для всех алгоритмов закрашивания нужно задавать начальную точку внутри контура с координатами x0, y0. Простейший алгоритм можно описать так [1]:
Шаг 1. Определить x0, y0. Шаг 2. Выполнить функцию ЗАКРАШИВАНИЕ (x0, y0).
Функцию ЗАКРАШИВАНИЕ() определим так:
Функция ЗАКРАШИВАНИЕ (x, y) { Если цвет пикселя (x, y) не равен цвету границы, то { установить для пикселя (x, y) цвет заполнения ЗАКРАШИВАНИЕ (x+1, y); ЗАКРАШИВАНИЕ (x-1, y); ЗАКРАШИВАНИЕ (x, y+1); ЗАКРАШИВАНИЕ (x, y-1); } }
Такое определение функции является рекурсивным. Рекурсия позволяет упростить запись некоторых алгоритмов. Но для этого алгоритма рекурсия порождает существенные проблемы - рекурсивные вызовы функции ЗАКРАШИВАНИЕ() делаются для каждого пикселя, что обычно приводит к переполнению стека в ходе выполнения компьютерной программы. Практика показывает, что этот алгоритм неприменим для фигур площадью в тысячу и больше пикселей.
Можно построить подобный алгоритм и без рекурсии, если вместо стека компьютера использовать отдельные массивы. Тогда стек не переполняется.
На следующем шаге мы рассмотрим волновой алгоритм закрашивания.