3.4.3. КВАДРАТИЧНЫЕ ПОВЕРХНОСТИВопросам обработки квадратичных поверхностей посвящена обширная литература [48,59,103,107,115,131], что обусловлено, с одной стороны, относительной простотой их обработки, а с другой – богатством геометрических форм. Уравнение функции вида или в матричном виде , (3.4.12) где – матрица (2.2.3), описывает квадратичную поверхность. В составе примитива квадратичная поверхность может присутствовать самостоятельно (эллипсоид) или в комбинации с плоскостями и другими квадратичными поверхностями. Функции второго порядка являются знакоразделимыми, т.е. их значения в точках, лежащих по разные стороны от поверхности, имеют разные знаки. Это утверждение следует из того, что градиент скалярного поля существует в любой точке поверхности и не равен нулю. Воспользуемся этим свойством для создания примитива с положительным значением скалярного поля во внутренней области. Это состояние достигается выбором знака функции . Таким образом, конкретизируем понятие примитива как сплошного объемного объекта, поверхность которого состоит из нескольких функций , , причем примитиву принадлежит то подпространство, отсекаемое поверхностью , в котором значение функции положительно. В соответствии с методом трассирования лучей найдем точки пересечения светового луча с поверхностью второго порядка (3.4.12). Прямую , проходящую через две точки и , задаем в параметрическом виде: ; ; , (3.4.13) где ; ; ; – переменная. Подставим выражения из (3.4.13) в (3.4.12): . Введем новые матрицы и , с помощью которых можно получить [19] . Так как и – скаляры, то нетрудно установить, что . Действительно, . Тогда . Проверим дискриминант полученного квадратичного уравнения. Если , точки пересечения отсутствуют: при луч проходит мимо поверхности без пересечений, при луч скользит по ней, касаясь в одной точке, что следует интерпретировать как невидимость поверхности. При из решения квадратного уравнения получаем два корня: , которым в трехмерном пространстве соответствуют координаты ; ; . Проведя подобные вычисления со всеми другими поверхностями, слагающими примитив, получим множество точек, принадлежащих поверхностям. Однако не все они лежат на поверхности примитива, как, например, точка на рис. 3.4.8. Для устранения таких ложных пересечений воспользуемся принципом положительности внутренней области примитива. Если световой луч пересекает какую-либо поверхность в точке за пределами примитива, то обязательно найдется хотя бы одна поверхность , такая, что . Так как примитив является выпуклым, то истинных решений может быть только два: одно решение – точка принадлежит передней стенке примитива, второе – задней. Рис. 3.4.8. Пересечение луча с продолжением поверхностей цилиндра Имея аппарат определения видимой точки для квадратичного примитива, необходимо быть уверенным в его работоспособности при перемещении примитива в объектной системе координат. В §2.2 приведены правила определения коэффициентов уравнения квадратичной поверхности при изменении системы координат. Напомним, что если в системе координат квадратичная поверхность задается матрицей , а для перевода некоторой точки из этой системы в другую – необходимо применить преобразование вида , где – матрица размера элемента (3.4.9), то новая матрица квадратичной поверхности в новой системе координат будет определяться по правилу . Для метода трассирования лучей и твердотельной конструкции примитива существенно важным является инвариантность свойства положительности внутренней области примитива по отношению к преобразованию координат (перемещениям примитива). В соответствии с доказательством, приведенным в §2.2, наблюдается не только инвариантность знака скалярного поля второго порядка внутри примитива, но и сохранение ориентации нормали при перемещениях примитива. Нормальный вектор в точке квадратичной поверхности, построенной по принципу положительности внутренней области, должен определяться по правилу , (3.4.14) где . Функция представляет собой вектор-столбец . Вектор направлен по градиенту скалярного поля , т.е. в сторону возрастания значений . В выражение (3.4.14) введем знак минус, так как для вычисления освещенности следует определять внешнюю нормаль, а вследствие ранее принятого правила выбора положительности поля внутри примитива возрастание значений квадратичной функции происходит по направлению внутрь примитива. В приложении приведены программы ALLOID, ALLIPS, CILIND, KONYS, PICA, используемые для изображения наиболее часто используемых примитивов второго порядка: ALLOID – эллипсоида, усеченного двумя плоскостями; ALLIPS – эллипсоида; CILIND – кругового цилиндра со свободно-ориентированной осью и закрытыми торцами; KONYS – конуса, ограниченного двумя плоскостями, перпендикулярными оси; PICA – неограниченного конуса. Все эти подпрограммы используют в свою очередь алгоритм решения квадратного уравнения KVADR и служебную подпрограмму NA8FIR, которая из нескольких точек пересечения прямой с примитивом сначала выбирает действительно лежащие на поверхности, а из последних - ближайшую к центру проекции. Процедура обработки эллипсоида и конуса ориентирована на расположение осей этих фигур параллельно координатным осям. Так как все решения пересечения прямой с примитивами ориентированы только на поиск одной ближайшей точки, то подпрограммы можно применять в сценах только с пространственно складывающимися фигурами. На рис. 3.2.2 показаны несколько шаров и усеченный эллипсоид (бочка), иллюстрирующие изобразительные свойства примитива типа эллипсоида. Изображение построено с использованием подпрограмм ALLIPS и ALLOID. Заметим, что шарообразные поверхности всегда проявляют блик, конечно, при их достаточной гладкости. Плоские же поверхности (торец бочки на рис. 3.2.2) проявляют блик только в очень узком диапазоне условий наблюдения и освещения. Изображение цилиндра, для которого использовано математическое описание в виде (3.2.1) показано на рис. 3.2.3. Рисунки 3.2.5,а,б демонстрируют возможности изменения облика конического примитива при перемещении отсекающих плоскостей вдоль оси конуса. Фигуру на рис. 3.2.5 называют бантик, фигуру на рис. 3.2.6 – усеченный конус.
|