
- •Введение
- •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.10. Определение выпуклости трехмерного тела
Ранее рассмотренный двумерный алгоритм определения выпуклости многоугольника, который использует повороты и переносы, можно обобщить на случай трехмерных многогранников.
Для каждой грани тела выполнить:
-
перенести тело так, чтобы одна из вершин граней оказалась в начале координат;
-
повернуть тело относительно начала координат так, чтобы одна из двух смежных выбранной вершине сторон граней, совпала с одной из осей (с осью x);
-
повернуть тело вокруг выбранной оси так, чтобы выбранная грань легла на координатную плоскость (плоскость z=0);
-
для всех вершин тела, не принадлежащих выбранной грани, проверить знаки координат, которые перпендикулярны этой грани (в нашем случае это координата z):
-
если эти знаки для всех вершин совпадают или равны нулю, то тело будет выпуклым относительно выбранной грани. Если тело выпукло относительно всех своих граней, то оно считается выпуклым, в противном случае – тело не выпукло;
-
если для всех вершин значения координаты, перпендикулярной выбранной грани равно нулю, то тело вырождено, т.е. оно плоское;
-
вектор внутренней нормали к выбранной плоскости заданный в повернутой системе координат имеет все нулевые компоненты, кроме той, которая перпендикулярна этой плоскости. Знак этой компоненты для выпуклой грани будет совпадать с раннее найденным знаком;
-
для определения искомой ориентации внутренней нормали в исходной системе координат необходимо применить к ней обратное преобразование поворотов.
5.11. Отсечение невыпуклых тел
Трёхмерная версия алгоритма Кируса – Бека работает с выпуклыми отсекателями. Вместе с тем существует потребность отсечения относительно невыпуклых тел. Её можно удовлетворить путём реализации внутренних и внешних отсечений выпуклыми объёмами, из которых состоит невыпуклое тело. Задачу разрезания простого невыпуклого тела на составляющие его выпуклые тела можно решить путём обобщения метода переносов и поворотов, который был рассмотрен ранее. В алгоритме предполагается, что тело представляет собой многогранник с плоскими гранями. Процедура разрезания такова.
Для каждой грани тела:
-
перенести тело так, чтобы одна из вершин выбранной грани совпала с началом координат;
-
повернуть тело вокруг начала координат так, чтобы одно из смежных ему ребёр совпало с одной из осей координат, например, с осью х;
-
повернуть тело вокруг выбранной оси координат так, чтобы выбранная грань совпала с одной из координатных плоскостей, например, с плоскостью z=0;
-
проверить знаки координаты, которая перпендикулярна выбранной грани (т.е. координаты z), для всех вершин тела, не лежащих на этой грани;
-
если все эти знаки совпадают или равны нулю, то тело является выпуклым относительно этой грани. В противном случае оно не выпукло; разрезать тело плоскостью, несущей выбранную грань;
-
повторить всю процедуру с каждым из вновь образовавшихся тел. Продолжать работу до тех пор, пока все тела не станут выпуклыми.