3.4.2. ВЫПУКЛЫЕ МНОГОГРАННИКИ
Выпуклые многогранники часто используются в качестве примитивов в машинной графике. Невыпуклые фигуры отдельно рассматриваться не будут, поскольку они всегда могут быть разделены на несколько смежных выпуклых. Пусть в системе координат объекта
многогранник из
плоских граней задан посредством матрицы
,
где
– коэффициент уравнения для
-й плоскости,
,
.
Плоскости, описывающие грани, простираются в бесконечность (рис. 3.4.6). Для того чтобы выделить из этого набора плоскостей центральное ядро-многогранник, зададим последнему особые свойства по сравнению с наружным относительно него полупространством. В соответствии с договоренностью о положительности внутренней области многогранника выберем знак функции каждой плоскости
таким, чтобы для любой точки
, лежащей на поверхности или внутри многогранника, значение этой функции было неотрицательным:
, где
. Тогда для каждой плоскости положительное полупространство включает примитив, а отрицательное находится снаружи примитива.

Рис. 3.4.6. Выпуклый многогранник и образующие его плоскости
В соответствии с методом трассирования лучей необходимо найти координаты точек пересечения светового луча, проходящего через точки
– центр проекции и
– центр рецептора, с многогранником. Так как в общей случае прямая пересекает все плоскости, то сначала найдем решение
систем вида

Решение каждой такой системы осуществляется в соответствии с методами, изложенными в §3.4.1. С учетом того, что отдельные
плоскостей могут не иметь пересечения с прямой, получаем в результате
решений, организованных в матрицу
,
где
– координаты пересечения
-й плоскости с прямой,
. Условие отсутствия пересечений прямой и плоскости или факта бесконечного множества решений, что будем также интерпретировать как невидимость плоскости лучом, эквивалентно условию перпендикулярности направляющего вектора прямой и нормали к плоскости:
. Для того чтобы в последующем сохранить информацию о соответствии точек пересечения с плоскостями пересечения, удалим из матрицы
соответствующие
столбцов:
,
где
– номер плоскости, которой принадлежит точка
. Эта информация необходима для вычисления нормали к видимой точке.

Рис. 3.4.7. Пересечение луча с продолжением грани примитива
Некоторые точки пересечения из приведенных в последней матрице
хотя и принадлежат каким-то плоскостям, но могут не принадлежать поверхности многогранника. Такие точки лежат за пределами примитива и следовательно должны быть устранены из последующего анализа, как это необходимо сделать с точкой
на рис. 3.4.8. Осуществим операцию оценки знака функций всех плоскостей последовательно для всех точек. Введем матрицу
размера
. Если выполняется условие
,
то в матрице
-я точка действительно принадлежит поверхности примитива. Если же найдется хотя бы одна
-я плоскость, для которой
, то
-я точка не принадлежит многограннику.
При увеличении числа граней принцип работы алгоритма не меняется. В результате отсеивания всех возможных
точек, лежащих вне тела примитива, матрица
сокращается еще на
строк. В последней матрице сосредоточились все действительные решения, которых в общем случае может быть больше двух из-за возможного пересечения прямой с вершиной многогранника. Устранив всех двойников одной и той же точки, получим в результате только два решения:
и
. Внешняя нормаль к поверхности многогранника в этих точках имеет вид
;
, где
- номера плоскостей, которым и принадлежат точки решения.
Эти плоскости определяются путем одновременного удаления столбцов из матрицы
под номерами, равными номерам строк матрицы
, удаляемыми как лежащие вне примитива или как двойники действительных решений.
В программах KOROB и SOME (см. приложение) приведены примеры решений пересечения прямой и шестигранника. Подпрограмма KOROB определяет возможные переселения со всеми шестью плоскостями и среди них выбирает ближайшее решение-точку к центру проекции. Оценка расстояния между точками производится в объектной системе координат по одной-единственной координате
, что является частным случаем общего алгоритма поиска ближайших точек. Выбор ближайшей точки осуществляется с помощью подпрограммы SOME. Результат, полученный с помощью подпрограммы KOROB, показан на рис. 3.2.4. Для изображения такого простого объекта нет необходимости обязательно применять столь мощное средство как метод трассирования лучей, однако как только сцена становится сложной: генерируются тени, проявляются криволинейные и прозрачные поверхности и другие эффекты, - применение этого метода становится оправданным. Если же сцена состоит только из выпуклых многогранников, то целесообразно использовать метод сканирующей строки или алгоритм Робертса (см. §4.2, 4.3).
Важной задачей в практике применения методов машинной графики является перемещение многогранника в объектном пространстве. Пусть многогранник задан исходно в правой прямоугольной системе координат
матрицей
, тогда если новая система координат
связана со старой
матрицей преобразования
:
, то в системе
новые параметры плоскостей, сведенные в матрицу
,
можно вычислить по правилу
. Этот вывод вытекает из обобщения формулы для случая системы плоскостей.
Как на этапе определения яркости теневой точки, так и для определения принадлежности некоторой точки поверхности многогранника необходимо соблюдение правила ориентации нормалей по всем граням внутри фигуры. При переносе многогранника в объектном пространстве, что эквивалентно выбору новой системы координат, меняются значения коэффициентов плоскостей, а это может нарушить ориентацию нормали. Однако этого не происходит в силу сохранения знаков полупространства для каждой из плоскостей, образующих многогранник. Так, если в некоторой системе координат
внутренняя область многогранника, который описан матрицей
, положительна относительно каждой грани, т.е. для каждой точки
, заведомо лежащей внутри фигуры, справедливо
, где
- положительное число,
, то положительность внутренней области сохраняется при любом изменении системы координат.
Действительно, известно, что
;
;
, тогда можно получить
.
Многогранник можно перемещать и вращать относительно его исходного положения с помощью преобразования координат, не опасаясь нарушения общего алгоритма.