Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОКГ_ответ.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
174.97 Кб
Скачать

Алгоритми малювання відрізків. Метод Брезенхема. Оптимальність.

Алгоритм DDA-линии — простой алгоритм, использующий вещественную арифметику.

Алгоритм Брезенхэма — оптимизированный алгоритм, использующий целочисленную арифметику и только операции сложения и вычитания.

Алгоритм Ву — модифицированный алгоритм Брезенхэма, обеспечивающий сглаживание.

Метод Брезенхема:

Отрезок проводится между двумя точками — и , где в этих парах указаны столбец и строка, соответственно, номера которых растут вправо и вниз. Сначала мы будем предполагать, что наша линия идёт вниз и вправо, причём горизонтальное расстояние превосходит вертикальное , то есть наклон линии от горизонтали — менее 45°. Наша цель состоит в том, чтобы для каждого столбца x между и , определить, какая строка y ближе всего к линии, и нарисовать точку .

Общая формула линии между двумя точками:

Поскольку мы знаем колонку , то строка получается округлением к целому следующего значения:

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

которое можно вычислить заранее. Более того, на каждом шаге мы делаем одно из двух: либо сохраняем тот же y, либо уменьшаем его на 1.

Что из этих двух выбрать — можно решить, отслеживая значение ошибки, которое означает — вертикальное расстояние между текущим значением y и точным значением y для текущего x. Всякий раз, когда мы увеличиваем x, мы увеличиваем значение ошибки на величину наклона s, приведённую выше. Если ошибка превысила 0.5, линия стала ближе к следующему y, поэтому мы уменьшаем y на единицу, одновременно уменьшая значение ошибки на 1.

Алгоритми заповнення ділянок. Растрові алгоритми.

Алгоритм имеет три входных параметра: стартовый элемент, заменяемый цвет и цвет заливки. Отыскиваются все элементы массива, связанные со стартовым путём заменяемого цвета, и перекрашиваются в цвет заливки. Вариантов реализации достаточно много, но все они так или иначе используют очередь или стек. Вот псевдокод простейшего рекурсивного алгоритма, в котором связность в двумерном массиве определяется по 4 направлениям:

Заливка (элемент, заменяемый цвет, цвет заливки):

1. Если цвет элемента не заменяемый цвет, возврат.

2. Установить цвет элемента в цвет заливки.

3. Заливка (шаг на запад от элемента, заменяемый цвет, цвет заливки).

Заливка (шаг на восток от элемента, заменяемый цвет, цвет заливки).

Заливка (шаг на север от элемента, заменяемый цвет, цвет заливки).

Заливка (шаг на юг от элемента, заменяемый цвет, цвет заливки).

{для связности по 8 направлениям - ещё четыре вызова по диагоналям}

4. Возврат.

Алгоритми заповнення ділянок. «Затравочні» алгоритми.

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

Построчный алгоритм заполнения с затравкой

Затравочный пиксел на интервале извлекается из стека, содержащего затравочные пикселы.

Интервал с затравочным пикселом заполняется влево и вправо от затравки вдоль сканирующей строки до тех пор, пока не будет найдена граница.

В переменных Хлев и Хправ запоминаются крайний левый и крайний правый пикселы интервала.

В диапазоне Хлев <= x <= Xправ проверяются строки, расположенные непосредственно над и под текущей строкой. Определяется, есть ли на них еще не заполненные пикселы. Если такие пикселы есть (т. е. не все пикселы граничные, или уже заполненные), то в указанном диапазоне крайний правый пиксел в каждом интервале отмечается как затравочный и помещается в стек.

При инициализации алгоритма в стек помещается единственный затравочный пиксел, работа завершается при опустошении стека

Інтерактивне графічне моделювання.

Задача интерактивной системы машинной графики при выполнении вывода заключается в преобразовании информации из исходного высокоуровневого представления предметной области в представление команд графических устройств вывода. При выполнении ввода, наоборот, требуется преобразование низкоуровневой информации от физических устройств ввода в высокоуровневую информацию на языке предметной области.

Принцип та алгоритми відсічення в КГ.

Отсечение или клиппинг (англ. clipping) — метод оптимизации в рендеринге и компьютерной графике, когда компьютер прорисовывает только ту часть сцены, которая может находиться в поле зрения пользователя.

Существует несколько алгоритмов отсечения области отрисовки.

Отсечение отрезков:

Алгоритм Коэна — Сазерленда

Алгоритм Кируса — Бека

Алгоритм Лианга — Барски (англ.)

Быстрое отсечение (англ.)

Николла — Ли — Николла (англ.)

Алгоритм Коэна — Сазерленда

Алгоритм разделяет плоскость на 9 частей прямыми, которые образуют стороны прямоугольника. Каждой из 9 частей присваивается четырёхбитный код. Биты (от младшего до старшего) значат «левее», «правее», «ниже», «выше». Иными словами, у тех трёх частей плоскости, которые слева от прямоугольника, младший бит равен 1, и так далее.

Алгоритм определяет код конечных точек отрезка. Если оба кода равны нулю, то отрезок полностью находится в прямоугольнике. Если битовое И кодов не равно нулю, то отрезок не пересекает прямоугольник (так как это значит, что обе конечные точки отрезка находятся с одной стороны прямоугольника). В прочих случаях, алгоритм выбирает конечную точку, находящуюся вне прямоугольника, находит ближайшую к ней точку пересечения отрезка с одной из линий, образующей стороны прямоугольника, и использует эту точку пересечения как новую конечную точку отрезка. Укороченный отрезок снова пропускается через алгоритм.

Реализация алгоритма для трёхмерной модели идентична двумерной реализации, за исключением того, что вместо четырёхразрядного кода применяется шестиразрядный (дополнительные два бита глубины).