- •1. Цвет в компьютерной графике 13
- •2. Геометрические преобразования 20
- •3. Представление геометрической информации 37
- •4. Удаление невидимых поверхностей и линий 45
- •5. Проекции пространственных сцен 55
- •5.4. Вопросы и упражнения 67
- •1. Отображение информации
- •10.6 Вопросы и упражнения 108
- •12.4 Вопросы и упражнения 118
- •Введение Предмет и область применения компьютерной графики
- •2. Проектирование
- •3. Моделирование
- •4. Графический пользовательский интерфейс
- •Краткая история
- •Технические средства поддержки компьютерной графики
- •Вопросы и упражнения
- •1. Цвет в компьютерной графике
- •1.1. О природе света и цвета
- •1.2. Цветовой график мко
- •1.3. Цветовые модели rgb и cmy
- •1.4. Другие цветовые модели
- •1.5. Вопросы и упражнения
- •2. Геометрические преобразования
- •2.1. Системы координат и векторы на плоскости и в трёхмерном пространстве
- •2.2. Уравнения прямой и плоскости
- •2.3. Аналитическое представление кривых и поверхностей
- •2.4. Пересечение луча с плоскостью и сферой
- •2.5. Интерполяция функций одной и двух переменных
- •2.6. Матрицы
- •2.7. Геометрические преобразования (перенос, масштабирование, вращение)
- •2.8. Переход в другую систему координат
- •2.9. Задача вращения относительно произвольной оси
- •2.10. Вопросы и упражнения
- •3. Представление геометрической информации
- •3.1. Геометрические примитивы
- •Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •3.2. Системы координат: мировая, объектная, наблюдателя и экранная
- •3.3. Однородные координаты
- •3.4. Вопросы и упражнения
- •4. Удаление невидимых поверхностей и линий
- •4.1. Алгоритм Робертса
- •4.2. Метод z-буфера
- •4.3. Методы приоритетов (художника, плавающего горизонта)
- •4.4. Алгоритмы построчного сканирования для криволинейных поверхностей
- •4.5. Метод двоичного разбиения пространства
- •4.6. Метод трассировки лучей
- •4.7. Вопросы и упражнения
- •5. Проекции пространственных сцен
- •5.1. Основные типы проекций
- •Параллельные проекции
- •Центральные проекции
- •5.2. Математический аппарат
- •Ортогональные проекции
- •Косоугольные проекции
- •Центральные проекции
- •5.3. Специальные картографические проекции. Экзотические проекции земной сферы
- •Стереографическая проекция
- •Гномоническая проекция
- •Ортографическая проекция
- •Проекции на цилиндр
- •Проекция Меркатора
- •Проекции на многогранник
- •Необычные проекции
- •5.4. Вопросы и упражнения
- •6. Растровое преобразование графических примитивов
- •6.1. Алгоритм Брезенхема растровой дискретизации отрезка
- •6.2. Алгоритмы Брезенхема растровой дискретизации окружности и эллипса
- •6.3. Алгоритмы заполнения областей
- •6.4. Вопросы и упражнения
- •7. Закрашивание. Рендеринг полигональных моделей
- •7.1. Простая модель освещения
- •7.2. Закраска граней Плоское закрашивание
- •Закраска методом Гуро
- •Закраска методом Фонга
- •7.3. Более сложные модели освещения
- •7.4. Устранение ступенчатости (антиэлайзинг)
- •7.5. Вопросы и упражнения
- •8. Визуализация пространственных реалистических сцен
- •8.1. Трехмерный графический конвейер
- •8.2. Свето-теневой анализ
- •8.3. Глобальная модель освещения с трассировкой лучей
- •8.4. Текстуры
- •8.5. Вопросы и упражнения
- •9. Введение в вычислительную геометрию
- •9.1 Вычислительная сложность алгоритмов
- •9.2 Основные геометрические объекты
- •9.3 Вопросы и упражнения
- •10. Триангуляция Делоне и диаграмма Вороного
- •10.1 Введение
- •10.2 Разбиение Делоне
- •10.3 Разбиение Вороного
- •Многогранник Вороного
- •Теорема о разбиении Вороного
- •10.4 Дуальность разбиений Вороного и Делоне
- •10.5 Алгоритм построения тетраэдризации Делоне
- •Триангуляция Делоне
- •10.6 Вопросы и упражнения
- •11. Алгоритмы построения выпуклой оболочки и триангуляции
- •11.1. Алгоритм построения выпуклой оболочки с использованием метода сортировки
- •Ячейки Вороного
- •11.2 Алгоритм построения триангуляции
- •12. Алгоритмы геометрического поиска
- •12.1 Поиск в плоском случае
- •12.2 Поиск на множестве тетраэдров
- •12.3 Поиск на множестве произвольных несамопересекающихся многогранников е3
- •12.4 Вопросы и упражнения
- •Список литературы
6.2. Алгоритмы Брезенхема растровой дискретизации окружности и эллипса
Алгоритм изображения окружности
несколько сложнее, чем построение
отрезка. Мы рассмотрим его для случая
окружности радиуса
с центром в начале координат. Перенесение
его на случай произвольного центра не
представляет труда. При построении
растровой развертки окружности можно
воспользоваться ее симметрией относительно
координатных осей и прямых
.
Необходимо сгенерировать лишь одну
восьмую часть окружности, а остальные
ее части можно получить путем отображений
симметрии. За основу можно взять часть
окружности от 0 до 45° в направлении по
часовой стрелке с исходной точкой
построения
.
В этом случае координата окружности
является монотонно убывающей функцией
координаты
.
Рис. 6.6. Ближайший пиксель при движении по окружности
При выбранном направлении движения по окружности имеется только три возможности для расположения ближайшего пикселя: на единицу вправо, на единицу вниз и по диагонали вниз (рис. 6.6). Выбор варианта можно осуществить, вычислив расстояния до этих точек и выбрав минимальное из них:
,
,
.
Алгоритм можно упростить, перейдя к
анализу знаков величин
.
При
диагональная точка лежит внутри
окружности, поэтому ближайшими точками
могут быть только диагональная и правая.
Теперь достаточно проанализировать
знак выражения
.
Если
,
выбираем горизонтальный шаг, в противном
случае — диагональный. Если же
,
то определяем знак
,
и если
,
выбираем диагональный шаг, в противном
случае — вертикальный. Затем вычисляется
новое значение
,
причем желательно минимизировать
вычисления не только этой величины, но
и величин
на каждом шаге алгоритма. Путем несложных
преобразований можно получить для
первого шага алгоритма, что
.
После перехода в точку
по диагонали новое значение
вычисляется по формуле
,
при горизонтальном переходе (
)
,
при вертикальном (
)
—
.
Таким образом, алгоритм рисования этой
части окружности можно считать полностью
описанным. Все оставшиеся ее части
строятся параллельно: после получения
очередной точки
можно инициализировать еще семь точек
с координатами
,
,
,
,
,
,
.
Для построения растровой развертки
эллипса с осями, параллельными осям
координат, и радиусами
воспользуемся каноническим уравнением
,
которое перепишем в виде
.
В отличие от окружности, для которой
было достаточно построить одну восьмую
ее часть, а затем воспользоваться
свойствами симметрии, эллипс имеет
только две оси симметрии, поэтому
придется строить одну четверть всей
фигуры. За основу возьмем дугу, лежащую
между точками
и
,
лежащую в первом квадранте координатной
плоскости.
В каждой точке
эллипса существует вектор нормали,
задаваемый градиентом функции
.
Дугу разобьем на две части: первая — с
углом между нормалью и горизонтальной
осью больше 45° (тангенс больше 1) и вторая
— с углом, меньшим 45° (рис. 7.7). Движение
вдоль дуги будем осуществлять в
направлении по часовой стрелке, начиная
с точки
.
Вдоль всей дуги координата
является монотонно убывающей функцией
от
,
но в первой части она убывает медленнее,
чем растет аргумент, а во второй быстрее.
Поэтому при построении растрового
образа в первой части будем увеличивать
на единицу и искать соответствующее
значение
,
а во второй сначала уменьшать значение
на единицу и определять соответствующее
значение
.
Направление нормали соответствует вектору
.
Отсюда находим тангенс угла наклона
вектора нормали:
.
Приравнивая его единице, получаем, что
координаты точки деления дуги на
вышеуказанные части удовлетворяют
равенству
.
Поэтому критерием того, что мы переходим
ко второй области в целочисленных
координатах будет соотношение
,
или, переходя к целочисленным операциям,
.
Рис. 6.7. Две области на участке эллипса
Рис. 6.8. Схема перехода в первой и второй областях дуги эллипса
При перемещении вдоль первого участка
дуги мы из каждой точки переходим либо
по горизонтали, либо по диагонали, и
критерий такого перехода напоминает
тот, который использовался при построении
растрового образа окружности. Находясь
в точке
,
мы будем вычислять значение
.
Если это значение меньше нуля, то
дополнительная точка
лежит
внутри эллипса, следовательно, ближайшая
точка растра есть
,
в противном случае это точка
(рис. 6.8а).
На втором участке дуги возможен переход
либо по диагонали, либо по вертикали,
поэтому здесь сначала значение координаты
y уменьшается на
единицу, затем вычисляется
и направление перехода выбирается
аналогично предыдущему случаю (рис. 6.8б).
Остается оптимизировать вычисление
параметра
,
умножив его на 4 и представив в виде
функции координат точки. Тогда для
первой половины дуги имеем
,
,
.
Для второй половины дуги получим
,
,
.
Все оставшиеся дуги эллипса строятся параллельно: после получения очередной точки , можно инициализировать еще три точки с координатами , , .
