Шаг 45.
Основы компьютерной графики. Базовые растровые алгоритмы. Стиль линии (перо). Алгоритмы вывода толстой линии

    На этом шаге мы рассмотрим несколько алгоритмов вывода таких линий.

    Для описания различных по виду изображений на основе линий используют термин стиль линий или перо. Термин перо иногда делает более понятной суть алгоритма вывода линий для некоторых стилей - в особенности для толстых линий. Например, если для тонкой непрерывной линии перо соответствует одному пикселю, то для толстых линий перо можно представить себе как фигуру или отрезок линии, который скользит вдоль оси линии, оставляя за собой след.

    Взяв за основу любой алгоритм вывода обычных тонких линий (например, алгоритм Брезенхэма), запишем его в следующем обобщенном виде:

   Вывод пикселя (х, у)

    Можно представить себе такой алгоритм, как цикл, в котором определяются координаты (х,у) каждого пикселя. Этот алгоритм можно модифицировать для вывода толстой линии следующим образом:

   Вывод фигуры (или линии) пера с центром (х, у)

    Вместо вывода отдельного пикселя стоит вывод фигуры или линии, соответствующей перу - прямоугольник, круг, отрезок прямой.

    Такой подход к разработке алгоритмов толстых линий имеет преимущества и недостатки. Преимущество: можно прямо использовать эффективные алгоритмы для вычисления координат точек линии оси, например, алгоритмы Брезенхэма. Недостаток: неэффективность для некоторых форм пера. Для перьев, которые соответствуют фигурам с заполнением, количество тактов работы алгоритма пропорционально квадрату толщины линии. При этом большинство пикселов многократно закрашивается в одних и тех же точках (рисунок 1).


Рис.1. Прямоугольное и круглое перья работают избыточно

    Такие алгоритмы более эффективны для перьев в виде отрезков линий. В этом случае каждый пиксель рисуется только один раз. Но здесь важным является наклон изображаемой линии. Ширина пера зависит от наклона (рисунок 2).


Рис.2. Перья в виде отрезков линий

    Очевидно, горизонтальное перо не может рисовать толстую горизонтальную линию.

    Для вывода толстых линий с помощью пера в качестве отрезка линии чаще всего используются отрезки горизонтальной или вертикальной линий, реже - диагональные отрезки под углом 45 градусов. Целесообразность использования такого способа определяется большой скоростью вывода горизонтальных и вертикальных отрезков прямой. Для того чтобы достигнуть минимального количества тактов вывода, толстые линии, которые по наклону ближе к вертикальным, рисуют горизонтальным пером, а пологие линии - вертикальным пером.

    При выводе толстых линий с использованием пера-отрезка линии заметны разрывы в углах полилиний и плохие концы (рисунок 3).


Рис.3. Вывод толстых линий с использованием пера-отрезка

    Для решения таких проблем иногда используют другие алгоритмы вывода толстых линий. Например, вывод толстой полилинии можно выполнить как рисование полигона с заполнением (рисунок 4).


Рис.4. Пример толстой полилинии

    Очевидный недостаток такого подхода - меньшая скорость вывода, поскольку заполнение полигона - это существенно более трудоемкая задача, чем вывод линий, а кроме того, нужно еще определять координаты его вершин.

    Третья разновидность алгоритмов вывода толстых линий - рисование толстой линии последовательным наложением нескольких тонких линий, смещенных одна относительно второй.

    На следующем шаге мы рассмотрим вывод пунктирной линии.




Предыдущий шаг Содержание Следующий шаг