Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Темы_Растровая_графика_Матрицы_Побитовые операц...docx
Скачиваний:
5
Добавлен:
19.09.2019
Размер:
1.18 Mб
Скачать
  1. Алгоритмы отсечения

7.1. Постановка задачи. Решение «в лоб»

Созданный объект надо разместить на экране в видовом окне (иногда называют область вывода, картинная плоскость). Как это можно сделать, если объект целиком не помещается в области вывода? Пусть имеется некоторая сцена и видовое окно. Видовое окно рассматривают как отсекающую рамку регулярной формы. Обычно, это квадратное или прямоугольное окно. Его задают 4-мя рёбрами – левым (Л, L), правым (П, R), верхним (В, T) и нижним (Н, ). Рёбра двумерные, т.е. заданы координатами ymin, ymax, xmin и xmax. Стороны окна параллельны осям координат экрана или объектного пространства. Покажем это окно.

В видовом окне ABCD необходимо разместить элемент некоторой сцены - ∆-к PRQ. Треугольник полностью в окно не входит, требуется отсечь отрезки Р1R и Q1R.

Задачу можно решить в «лоб».

Найдём наклон «К» отрезка PR

Координаты P, R и Q известны. Нужно найти координаты P1 и Q1.

Координата yp1 = ymax,

а из формулы для наклона легко найти вторую координату

xp1 = xp + .

Теперь отрезок P1R можно удалить.

Аналогично находят координаты точки Q1.

Недостаток решения очевиден: операции с вещественными числами и деление.

Число и расположение объектов на сцене может быть самым разным. Поэтому от алгоритма требуется выполнить отсечение всего, что располагается за границами видового окна за минимально возможное время, сохраняя все элементы и те их части, что попадают в область вывода. Алгоритм должен быть эффективным и по скорости и по качеству отсечения. Предпочтение отдают, обычно, скорости.

Понятно, всё что расположено внутри окна – видимо. Надо посмотреть на объекты, которые частично или целиком не лежат в области видимости. По отношению к видовому окну (на рис. – в центре) разные отрезки лежат по-разному. Продолжим стороны области вывода вверх-вниз, влево-вправо. А затем проанализируем ситуацию.

Отрезок АВ имеет обе концевые точки внутри окна. Поэтому он будет виден целиком. Отрезок EF имеет концевые точки за пределами окна, но часть его будет показана в области вывода. Если оба конца отрезка находятся выше, ниже, слева или справа окна, то их не видно вовсе. Проверка этого условия устранит все такие отрезки, и они не попадут в окно. Трудности возникнут с отрезками CD, EF и PQ. Визуально понятно, что для отрезков CD и EF надо найти точки пересечения отрезков с рёбрами окна вывода и перезадать координаты этих частей, чтобы они попали в окно. А для отрезка PQ нужно выполнить более развёрнутый анализ, чтобы принять правильное решение – отбросить отрезок как невидимый. Алгоритм при этом не должен содержать вычислений с вещественными числами.

Прежде чем двигаться дальше, нам потребуется познакомиться с понятием побитовые бинарные операции – Слайды 20, 21, 22

  1. Побитовые бинарные операции.

Битовая операция в программировании — некоторые операции над цепочками битов. В программировании, как правило, рассматриваются лишь некоторые виды этих операций: логические побитовые операции и битовые сдвиги. Битовые операции применяют в языках программирования и цифровой технике, изучаются в дискретной математике.

Содержание параграфа

  • 1 Побитовые логические операции

    • 1.1 Побитовое отрицание (NOT)

    • 1.2 Побитовое И (AND)

    • 1.3 Побитовое ИЛИ (OR)

    • 1.4 Побитовое исключающее ИЛИ (XOR)

    • 1.5 Другие побитовые логические операции

  • 2 Битовые сдвиги

    • 2.1 Логический сдвиг

    • 2.2 Арифметический сдвиг

    • 2.3 Циклический сдвиг

    • 2.4 В языках программирования

  • 3 В теории сложности алгоритмов

  • 4 Связь с другими науками

    • 4.1 Битовые операции и математическая логика

      • 4.1.1 Обобщение операций на булеву алгебру

      • 4.1.2 2-адическая интерпретация

    • 4.2 Битовые операции как основа цифровой техники

  • 5 Практические применения

    • 5.1 Физическая реализация битовых операций

    • 5.2 Схемы аппаратной логики

    • 5.3 Использование в программировании

  • 6 См. также

  • 7 Примечания

Нам здесь потребуется познакомиться более внимательно с разделом 1. Другие разделы данного параграфа потребуются при более глубоком изучении дисциплин данной специальности и они могут быть просмотрены позже