
- •Компьютерная графика
- •Направления компьютерной графики
- •Приложения компьютерной графики
- •2. Геометрическое моделирование и решаемые ими задачи
- •Элементы моделей
- •Методы построения моделей
- •Типы моделей
- •Полигональные сетки
- •3. Графические объекты, примитивы и их атрибуты
- •4. Представление видеоинформации и ее машинная генерация.
- •Обработка видеоинформации
- •5. Графические языки, метафайлы.
- •Архитектура графических терминалов и графических рабочих станций.
- •7. Реализация аппаратных модулей графической системы. Разрешающая способность устройств
- •Графические адаптеры и акселераторы История
- •Устройство современной графической платы
- •Устройства визуального отображения
- •Основные технические характеристики мониторов
- •Стандарты на мониторы
- •Некоторые разработки ведущих фирм
- •Печатающие устройства Технология печати
- •Технические характеристики
- •Типы принтеров
- •Сканеры Аппаратное обеспечение
- •Программное обеспечение
- •8. Базовые растровые алгоритмы компьютерной графики
- •Генерация векторов
- •Цифровой дифференциальный анализатор
- •Алгоритм Брезенхема
- •Улучшение качества аппроксимации векторов
- •Модифицированный алгоритм Брезенхема
- •Улучшение качества изображения фильтрацией
- •Генерация окружности
- •Алгоритм Брезенхема
- •9. Методы и алгоритмы пространственной графики
- •Современные стандарты компьютерной графики.
- •11. Графические диалоговые системы. (Классификация графических систем 2d и 3d. Компас, AutoCad, SolidWorks, bCad и др.)
- •1.2. Краткий обзор зарубежных cad-систем
- •Технологические модули в pt/Products. Интеграция процессов проектирования и изготовления.
- •Работа со стандартными библиотеками посредством pt/LibraryAccess и pt/Library
- •12. Применение интерактивных графических систем
- •394026 Воронеж, Московский проспект, 14
Алгоритм Брезенхема
Так как приращения координат, как правило, не являются целой степенью двойки, то в ЦДА-алгоритме (см. предыдущий пункт) требуется выполнение деления, что не всегда желательно, особенно при аппаратной реализации.
Брезенхем в работе предложил алгоритм, не требующий деления, как и в алгоритме несимметричного ЦДА, но обеспечивающий минимизацию отклонения сгенерированного образа от истинного отрезка, как в алгоритме обычного ЦДА. Основная идея алгоритма состоит в том, что если угловой коэффициент прямой < 1/2, то естественно точку, следующую за точкой (0,0), поставить в позицию (1,0) (рис. а), а если угловой коэффициент > 1/2, то - в позицию (1,1) (рис. б). Для принятия решения куда заносить очередной пиксел вводится величина отклонения Е точной позиции от середины между двумя возможными растровыми точками в направлении наименьшей относительной координаты. Знак Е используется как критерий для выбора ближайшей растровой точки.
Если Е < 0, то точное Y-значение округляется до последнего меньшего целочисленного значения Y, т.е. Y-координата не меняется по сравнению с предыдущей точкой. В противном случае Y увеличивается на 1.
Для вычисления Е без ограничения общности упрощающе положим, что рассматриваемый вектор начинается в точке (0,0) и проходит через точку (4, 1.5), т.е. имеет положительный наклон меньший 1.
Отклонение для первого шага:
Е1 = Py/Px - 1/2 < 0,
поэтому для занесения пиксела выбирается точка (1,0).
Отклонение для второго шага вычисляется добавлением приращения Y-координаты для следующей X-позиции:
Е2 = Е1 + Py/Px > 0,
поэтому для занесения пиксела выбирается точка (2,1). Так как отклонение считается от Y-координаты, которая теперь увеличилась на 1, то из накопленного отклонения для вычисления последующих отклонений надо вычесть 1:
Е2 = Е2 - 1.
Отклонение для третьего шага:
Е3 = Е2 + Py/Px < 0,
поэтому для занесения пиксела выбирается точка (3,1).
Суммируя и обозначая большими буквами растровые точки, а маленькими - точки вектора, получаем:
Е1 = y1 - 1/2 = dY/dX - 1/2.
Возможны случаи:
Е1 > 0 |
E1 0 |
ближайшая точка есть: |
|
X1 = X0 + 1; Y1 = Y0 + 1; |
X1 = X0 + 1; Y1 = Y0; |
E2 = Е1 + Py/Px - 1; |
E2 = E1 + Py/Px. |
Так как интересует только знак Е, то можно избавиться от неудобные частных умножением E на 2×Px:
|
E1 = 2×Py - Px |
E1 > 0: |
E2 = E1 + 2×(Py - Px) |
E1 0: |
E2 = E1 + 2×Py |
Таким образом получается алгоритм, в котором используются только целые числа, сложение, вычитание и сдвиг:
X= x1;
Y= y1;
Px= x2 - x1;
Py= y2 - y1;
E= 2Py - Px;
i= Px;
PutPixel(X, Y); /* Первая точка вектора */
while (i= i- 1 0) {
if (E 0) {
X= X + 1;
Y= Y + 1;
E= E + 2(Py - Px); } else
X= X + 1;
E= E + 2Py;
PutPixel(X, Y); /* Очередная точка вектора */}
Этот алгоритм пригоден для случая 0 dY dX. Для других случаев алгоритм строится аналогичным образом.
Разработаны алгоритмы цифрового генератора для окружностей и других конических сечений.