Реферат Курсовая Конспект
Алгоритмы вывода линий - раздел Образование, Лекция 13 Координатный метод задания объектов на плоскости и в пространстве Многие Современные Программы (Векторные Графические Редакторы...
|
Многие современные программы (векторные графические редакторы, САПР, математические и другие специальные программы) работают с изображениями, представленными некоторыми математическими моделями. Наиболее часто такие изображения составлены из стандартного набора простых элементов, называемых графическими примитивами. Это могут быть прямые и кривые линии, фигуры (прямоугольники, окружности, эллипсы) и т.п. Для того, чтобы такое изображение, состоящее из примитивов, достаточно перечислить эти примитивы, указать их параметры (цвет, толщину и стиль линий, способ заливки фигур и др.) и взаимное расположение.
Поскольку практически все современные средства отображения графики (дисплеи, принтеры) растровые, для отображения картинки, заданной в векторном виде, необходимо преобразовать ее в растр. Такое преобразование обычно выполняется той программой, в которой изображение было создано, с использованием алгоритмов растеризации.
Для того, чтобы преобразовать в растр линию, необходимо изменить цвет пикселов, по которым эта линия проходит, рис. 13.2 а. Чтобы это сделать, нужно получить уравнение линии. Очевидно, наиболее простым графическим примитивом является отрезок прямой, который может быть задан координатами двух точек: начала (x1, y1) и конца — (x2, y2). Для произвольной точки (x, y), лежащей на отрезке прямой, должно выполняться условие
. (13.12)
Отсюда можем получить уравнение прямой как функцию y от x или наоборот:
. (13.13)
. (13.14)
Очевидно, что дробь в уравнении представляет собой угловой коэффициент и при построении может быть вычислена один раз. Для растеризации отрезка следует выяснить, какая из величин dx = x2 – x1 и dy = y2 – y1 больше, и построить «график» функции y = f1 (x) в первом или x = f1 (y) во втором случае. Выполняется простой цикл по соответствующей координаты от начальной до конечной точки с шагом в один пиксел. Другая координата определяется расчетом по (13.13) или (13.14) и округляется до целого значения; пиксел с полученными координатами (x, y) закрашивается заданным цветом.
Для точек окружности выполняется уравнение
, (13.15)
где R – радиус окружности, а (x0, y0) – координаты ее центра, рис. 13.2 б. Преобразовав это выражение, получим зависимость
, (13.16)
Поскольку окружность симметрична относительно вертикальной и горизонтальной осей, проходящих через ее центр, необязательно рассчитывать все точки окружности. Достаточно выполнить расчет для дуги 1-2 — октанта (1/8) окружности, — для чего выполняется цикл по координате x от x0 до x1 с шагом в один пиксел и вычисляются и округляются до целого соответствующие значения у. Затем закрашивается пиксел A(x, y) и еще семь пикселов, расположенных на дугах 2-3, 3-4, …, 8-1.
Для построения эллипса существует два способа. Первый — аналогичный вышеописанному, при этом используется уравнение эллипса
, (13.17)
где a и b – половины длин осей эллипса. Расчет выполняется не для октанта, а для всего квадранта, остальные 3 квадранта строятся симметрично.
Второй способ — использование алгоритма построения окружности с последующим масштабированием — «растягиванием» окружности пропорционально длинам осей эллипса.
Описанные выше способы построения линий просты для понимания, но их реализация связана с использованием операций с плавающей точкой, умножения и деления, извлечения квадратного корня. Такие операции выполняются процессором относительно медленно, что приводит к низкой скорости отображения, особенно на маломощных ЭВМ.
Существуют инкрементные алгоритмы растеризации, называемые еще алгоритмами Брезенхэма, позволяющие строить отрезки прямых, окружностей, эллипсов и других кривых, используя только операции целочисленного сложения и вычитания. Сущность алгоритма Брезенхэма проиллюстрируем на примере построения отрезка, рис. 13.3:
1. Определяем величины приращений: dx = x2 – x1; dy = y2 – y1.
2. Выбираем большее из приращений: dx > dy, значит d = dx.
3. Вводим текущие координаты x и y, а также вспомогательные переменные ex и ey. До начала цикла принимаем x = x1; y = y1; ex = 0; ey = 0. Закрашиваем пиксел с координатами (x, y)
4. Выполняем d раз цикл, в котором переменные ex и ey увеличиваем соответственно на dx и dy. Поле координат (ex, ey) условно разобьем на квадраты со стороной d. При выходе точки (ex, ey) за границу текущего квадрата по горизонтали или по вертикали значение соответственно x или y изменяется (увеличивается или уменьшается, в зависимости от направления отрезка) на 1. Получаем координаты следующего пиксела. Закрашиваем пиксел.
Аналогичные, но несколько более сложные алгоритмы используются для построения окружностей, эллипсов, дуг. Как видно, в приведенном алгоритме используются только операции сложения, вычитания и сравнения. Поскольку последние выполняются во много раз быстрее операций с плавающей точкой, такие алгоритмы обеспечивают высокую скорость отображения даже на маломощных ЭВМ.
К недостаткам алгоритма можно отнести некоторую «неточность» засветки пикселов, что видно из рис. 13.3, а также то, что опорные точки отрезков и других фигур могут иметь лишь целочисленные координаты (середины соответствующих пикселов).
– Конец работы –
Эта тема принадлежит разделу:
Методы двухмерной графики... Координатный метод задания объектов на плоскости и в пространстве... Координатный метод задания объектов на плоскости и в пространстве Преобразование координат...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Алгоритмы вывода линий
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов