Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Компьютерная графика.doc
Скачиваний:
44
Добавлен:
10.12.2018
Размер:
572.93 Кб
Скачать

5.10. Определение выпуклости трехмерного тела

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

Для каждой грани тела выполнить:

  1. перенести тело так, чтобы одна из вершин граней оказалась в начале координат;

  2. повернуть тело относительно начала координат так, чтобы одна из двух смежных выбранной вершине сторон граней, совпала с одной из осей (с осью x);

  3. повернуть тело вокруг выбранной оси так, чтобы выбранная грань легла на координатную плоскость (плоскость z=0);

  4. для всех вершин тела, не принадлежащих выбранной грани, проверить знаки координат, которые перпендикулярны этой грани (в нашем случае это координата z):

  • если эти знаки для всех вершин совпадают или равны нулю, то тело будет выпуклым относительно выбранной грани. Если тело выпукло относительно всех своих граней, то оно считается выпуклым, в противном случае – тело не выпукло;

  • если для всех вершин значения координаты, перпендикулярной выбранной грани равно нулю, то тело вырождено, т.е. оно плоское;

  1. вектор внутренней нормали к выбранной плоскости заданный в повернутой системе координат имеет все нулевые компоненты, кроме той, которая перпендикулярна этой плоскости. Знак этой компоненты для выпуклой грани будет совпадать с раннее найденным знаком;

  2. для определения искомой ориентации внутренней нормали в исходной системе координат необходимо применить к ней обратное преобразование поворотов.

5.11. Отсечение невыпуклых тел

Трёхмерная версия алгоритма Кируса – Бека работает с выпуклыми отсекателями. Вместе с тем существует потребность отсечения относительно невыпуклых тел. Её можно удовлетворить путём реализации внутренних и внешних отсечений выпуклыми объёмами, из которых состоит невыпуклое тело. Задачу разрезания простого невыпуклого тела на составляющие его выпуклые тела можно решить путём обобщения метода переносов и поворотов, который был рассмотрен ранее. В алгоритме предполагается, что тело представляет собой многогранник с плоскими гранями. Процедура разрезания такова.

Для каждой грани тела:

  1. перенести тело так, чтобы одна из вершин выбранной грани совпала с началом координат;

  2. повернуть тело вокруг начала координат так, чтобы одно из смежных ему ребёр совпало с одной из осей координат, например, с осью х;

  3. повернуть тело вокруг выбранной оси координат так, чтобы выбранная грань совпала с одной из координатных плоскостей, например, с плоскостью z=0;

  4. проверить знаки координаты, которая перпендикулярна выбранной грани (т.е. координаты z), для всех вершин тела, не лежащих на этой грани;

  5. если все эти знаки совпадают или равны нулю, то тело является выпуклым относительно этой грани. В противном случае оно не выпукло; разрезать тело плоскостью, несущей выбранную грань;

  6. повторить всю процедуру с каждым из вновь образовавшихся тел. Продолжать работу до тех пор, пока все тела не станут выпуклыми.