
- •Цветовые модели для растровой графики: rgb, cmy, yiq, hsv.
- •Ахроматический цвет. Выбор интенсивностей.
- •Дисплейные технологии.
- •Технологии получения твердых копий.
- •Геометрические преобразования в 2d и 3d графике.
- •Плоские проекции трехмерных объектов. Математическое описание и классификация параллельных проекций.
- •Плоские проекции трехмерных объектов. Математическое описание и классификация центральных проекций.
- •Конвейер видовых преобразований в двумерной графике.
- •2D и 3d моделирование в рамках графических систем
- •Методы описания кривых и поверхностей.
- •Основные схемы представления объемных тел. Граничное представление
- •Основные схемы представления объемных тел. Методы конструктивной геометрии.
- •Основные схемы представления объемных тел. Кинематические методы и методы объединения сечений.
- •Основные схемы представления объемных тел. Методы пространственного перечисления. Восьмеричные деревья.
- •Дискретные геометрические модели.
- •Функциональное представление геометрических объектов. Понятие об r-функциях. Теоретико-множественные операции и биективные преобразования.
- •Определение видимости поверхностей. Алгоритм Ньюэлла-Санча, использующий список приоритетов.
- •Определение видимости поверхностей. Алгоритм z-буфера.
- •Простая модель освещение. Рассеянный свет. Диффузное отражение. Зеркальное отражение.
- •Методы закраски полигональных поверхностей. Метод Гуро.
- •Методы текстурирования.
- •Алгоритмы отсечения многоугольников
- •Алгоритмы растровой развертки отрезков
- •Алгоритмы растровой развертки многоугольников
- •Параметрические кривые в форме Эрмита
- •Параметрические кривые в форме Безье
- •Рациональные параметрические кривые
- •Параметрические поверхности в форме Эрмита
Алгоритмы отсечения многоугольников
Сводится к отсечению линий при условии выпуклости многоугольника. Факт выпуклости или невыпуклости двумерного полигонального окна можно установить путем вычисления векторных произведений его смежных сторон. Выводы, которые можно сделать из анализа знаков этих произведений, таковы:
Все знаки равны нулю - многоугольник вырождается в отрезок.
Есть как положительные, так и отрицательные знаки - многоугольник невыпуклый.
Все знаки неотрицательные - многоугольник выпуклый, а внутренние нормали ориентированы влево от его контура.
Все знаки неположительны - многоугольник выпуклый, а внутренние нормали ориентированы вправо от его контура.
Другой подход заключается в том, что одна из вершин многоугольника может быть выбрана базой, и могут вычисляться векторные произведения для пар векторов, начинающихся в этой базе и заканчивающихся в последовательных вершинах многоугольника. Результаты этого метода интерпретируются точно так же.
Простое обобщение метода поворотов и переносов окна, используемого для определения факта его выпуклости или невыпуклости, позволяет разбивать или разделять простой невыпуклый многоугольник на несколько невыпуклых многоугольников. Если вершины многоугольника перечисляются против часовой стрелки, то эта процедура будет иметь вид:
Для каждой i-й вершины многоугольника надо так его перенести, чтобы она совпала с началом координат.
Повернуть многоугольник относительно координат по часовой стрелке так, чтобы (i+1)-я вершина оказалась на положительной полуоси x.
Проанализировав знак ординаты (i + 2)-й вершины. Если он неотрицателен, то многоугольник в (i + 1)-й вершине. Если же этот знак отрицателен, то многоугольник невыпуклый; разбить его.
Многоугольник разрезается вдоль положительной полуоси x, т.е. ищутся такие его стороны, которые пересекаются с осью x. Образуются два новых многоугольника: один состоит из вершин, лежащих выше оси x и ближайшей к началу координат точки пересечения с x > xi + 1, а второй - из вершин, лежащих ниже оси x и уже упомянутой точки пересечения.
Алгоритм рекурсивно применяется к полученным многоугольникам до тех пор, пока все они не станут выпуклыми.
Алгоритмы растровой развертки отрезков
Цифровой дифференциальный анализатор. Решается дифференциальное уравнение вида dY/dX = Py/Px, где Py = Yk - Yn - приращение координат отрезка по оси Y, а Px = Xk - Xn - приращение координат отрезка по оси X. При этом ЦДА формирует дискретную аппроксимацию непрерывного решения этого дифференциального уравнения. В обычном ЦДА, используемом, как правило, в векторных устройствах, тем или иным образом определяется количество узлов N, используемых для аппроксимации отрезка. Затем за N циклов вычисляются координаты очередных узлов. Получаемые значения Xi, Yi преобразуются в целочисленные значения координаты очередного подсвечиваемого пикселя либо округлением, либо отбрасыванием дробной части. Генератор векторов, использующий этот алгоритм, имеет тот недостаток, что точки могут прописываться дважды, что увеличивает время построения. Кроме того из-за независимого вычисления обеих координат нет предпочтительных направлений и построенные отрезки кажутся не очень красивыми.
А лгоритм Брезенхема. Так как приращения координат, как правило, не являются целой степенью двойки, то в ЦДА-алгоритме требуется выполнение деления, что не всегда желательно, особенно при аппаратной реализации. Брезенхем предложил алгоритм, не требующий деления, как и в алгоритме несимметричного ЦДА, но обеспечивающий минимизацию отклонения сгенерированного образа от истинного отрезка, как в алгоритме обычного ЦДА. Основная идея алгоритма состоит в том, что если угловой коэффициент прямой < 1/2, то естественно точку, следующую за точкой (0,0), поставить в позицию (1,0) (рис. а), а если угловой коэффициент > 1/2, то - в позицию (1,1) (рис. б). Для принятия решения куда заносить очередной пиксел вводится величина отклонения Е точной позиции от середины между двумя возможными растровыми точками в направлении наименьшей относительной координаты. Знак Е используется как критерий для выбора ближайшей растровой точки. Если Е < 0, то точное Y-значение округляется до последнего меньшего целочисленного значения Y, т.е. Y-координата не меняется по сравнению с предыдущей точкой. В противном случае Y увеличивается на 1.
Модифицированный алгоритм Брезенхема. Основная идея алгоритма состоит в том, чтобы для ребер многоугольника устанавливать яркость пикселя пропорционально площади пикселя, попавшей внутрь многоугольника.