- •Введение
- •1. Машинная графика и обработка изображения с помощью эвм
- •2. Типы графических устройств
- •2.1. Графические дисплеи на запоминающей трубке
- •2.2. Векторные графические дисплеи с регенерацией изображения
- •2.3. Растровые графические дисплеи с регенерацией изображения
- •2.4. Диалоговые устройства
- •3. Основы растровой графики
- •3.1. Алгоритмы вычерчивания отрезков
- •3.2. Цифровой дифференциальный анализатор
- •3.3. Алгоритм Брезенхема
- •3.4. Целочисленный алгоритм Брезенхема
- •3.5. Общий алгоритм Брезенхема
- •3.6. Алгоритм Брезенхема для генерации окружности
- •4. Растровая развертка изображения
- •4.1. Растровая развертка в реальном времени
- •4.2. Групповое кодирование
- •4.3. Клеточное кодирование
- •4.4. Буферы кадра
- •4.5. Изображение отрезков
- •4.6. Изображение литер
- •4.7. Растровая развертка сплошных областей и заполнение многоугольников
- •1 X 8 – внутри многоугольника;
- •1 Х 4 – внутри многоугольника;
- •6 Х 8 – внутри многоугольника;
- •4.8. Простой алгоритм с упорядоченным списком ребер
- •4.9. Алгоритм заполнения по ребрам
- •4.10. Алгоритм со списком ребер и флагом
- •4.11. Алгоритм заполнения с затравкой
- •4.12. Построчный алгоритм заполнения с затравкой
- •4.13. Основные методы устранения ступенчатости
- •4.14. Аппроксимация полутонами
- •5. Отсечение
- •5.1. Двумерное отсечение
- •5.2. Алгоритм отсечения Сазерленда-Коэна
- •5.3. Алгоритм разбиения средней точкой
- •5.4. Обобщение: отсечение двумерного отрезка выпуклым окном
- •5.5. Алгоритм Кируса–Бека
- •5.6. Внутреннее и внешнее отсечение
- •5.7. Определение факта выпуклости многоугольника
- •5.8. Разбиение невыпуклых многоугольников
- •5.9. Трехмерное отсечение
- •5.10. Определение выпуклости трехмерного тела
- •5.11. Отсечение невыпуклых тел
- •5.12. Отсечение многоугольников
- •5.13. Последовательное отсечение многоугольника – алгоритм Сазерленда – Ходжмена
- •5.14. Невыпуклые отсекающие области – алгоритм
- •5.15. Литеры
- •6. Удаление невидимых линий и поверхностей
- •6.1. Алгоритм плавающего горизонта
- •6.2. Алгоритм Робертса
- •6.3. Алгоритм Варнока
- •6.4. Алгоритм Вейлера–Азертона
- •6.5. Алгоритм, использующий z-буфер
- •6.6. Алгоритмы, использующие список приоритетов
- •6.7. Алгоритм построчного сканирования
- •6.8. Алгоритм построчного сканирования, использующий
- •Библиографический список рекомендуемой литературы
- •Оглавление
- •1. Машинная графика и обработка изображения с помощью эвм….……..3
5. Отсечение
Отсечение – процесс выделения некоторой части базы данных, играет важную роль в задачах машинной графики. Алгоритмы отсечения бывают двух- и трёхмерными. Они могут быть реализованы аппаратно или программно. Алгоритмы отсечения, реализованные программно, часто оказываются недостаточно быстродействующими для приложений, ориентированных на процессы, протекающие в реальном времени.
5.1. Двумерное отсечение
Отсекающие окна задаются левым (Л), правым (П), нижним (Н), верхним (В) двухмерными ребрами (рис.10). Регулярным отсекающим окном является прямоугольник, стороны которого параллельны осям координат объектного пространства или осям координат экрана. Целью алгоритма отсечения является определение тех точек, отрезков или их частей, которые лежат внутри отсекающего окна. Эти точки, отрезки или их части остаются для визуализации. А все остальные отбрасываются.
Т .к. обычно необходимо отсекать большое число отрезков или точек, то эффективность алгоритмов представляет особый интерес. Во многих случаях подавляющее большинство точек или отрезков лежит целиком внутри или вне отсекающего окна. Поэтому важно уметь быстро отбирать такие точки и отрезки. Точки лежащие внутри отсекающего окна удовлетворяют условию:
XлXXп,
YнYYв.
Знак равенства здесь показывает, что точки, лежащие на границе окна, считаются находящимися внутри него.
Отрезок лежит внутри окна и, следовательно, является видимым, если обе его концевые точки лежат внутри окна, например, отрезок ab на рис.10. Если обе его концевые точки лежат справа, слева, выше, ниже окна, то этот отрезок лежит целиком вне окна, а значит невидим. Проверка последнего условия устранить все отрезки ij, но не устранит все отрезки gh и kL, которые видимы частично, либо полностью невидимы.
Пусть a и b - конечные точки отрезка, тогда можно записать алгоритм, определяющий все полностью видимые и большинство невидимых отрезков.
Простой алгоритм определения видимости
a, b – конечные точки отрезка в координатном пространстве (X, Y)
для каждого отрезка проверить полную видимость
если одна из координат какого-нибудь конца отрезка находится вне окна, то отрезок не является полностью видимым.
if Xа<XЛ or Xа>XП then 1
if Xb<XЛ or Xb>XП then 1
if Ya<YН or Ya>YВ then 1
if Yb<YН or Yb>YВ then 1
отрезок полностью видимый
визуализировать отрезок
goto 3
проверить полную невидимость отрезка
если оба конца отрезка лежат слева, справа, сверху или снизу от окна, то факт невидимости отрезка подтверждается
1) if Xа<XЛ and Xb<XЛ then 2
if Xa>XП and Xb>XП then 2
if Ya>YВ and Yb>YВ then 2
if Ya<YН and Yb<YН then 2
отрезок частично видим или пересекает продолжение диагонали, оставаясь невидимым
определить пересечения отрезка с окном
2) отрезок невидим
3) переход к следующему отрезку
Порядок проведения сравнений при определении видимости несущественен, для некоторых отрезков может понадобиться проведение всех четырех сравнений прежде, чем определится их полная видимость или невидимость, для других отрезков может потребоваться одно сравнение. Поскольку определение пересечения отрезка с окном требует большого количества вычислений, его следует проводить в последнюю очередь.