17.6. ОПИСАНИЕ НЕЛИНЕЙНЫХ ОБЪЕКТОВ
Алгоритм 17.2 имеет достаточно общий характер, и для его применения не имеет значения форма поверхности граней, если отвлечься от подробностей вычислительных процедур. Этот алгоритм предусматривает выполнение следующих операций: а) определение наличия пересечения плоскости, задаваемой уравнением постоянная, с гранью; б) если оказывается, что пересечение имеет место, определяется получаемая фигура; в) поиск ближайшей кривой по оси Это очень простые операции, если грани представляют собой плоские выпуклые многоугольники. Действительно, для выполнения операции а) необходимо лишь определить экстремальные значения координаты у на границах обрабатываемой грани. Операции б) и в) связаны исключительно с обработкой отрезков прямых. Если предполагается штриховка воспроизведенного изображения, необходимо также определить для каждого отрезка нормаль к поверхности (см. разд. 13.9). Для плоского многоугольника направление нормали фиксировано во всех точках. Это упрощение перестает действовать в случае нелинейных конечных участков поверхности. Для того чтобы установить, пересекается ли рассматриваемый конечный участок поверхности с плоскостью, необходимо учитывать не только границу этого участка, но и силуэт его проекции — это необходимо для учета выступающих выпуклостей по верхности. На рис. 17.11 представлены два таких силуэта сферических конечных участков поверхности. Поскольку в этой ситуации
Рис. 17.11 Силуэты конечных участков сферических поверхностей
направление нормали к поверхности не фиксировано, обрабатываться должны все внутренние точки поверхности.
Пусть — параметрическое уравнение поверхности и пусть кривые ограничивают один из ее участков. Такое представление допускают поверхности Кунса (см. разд. 13.6), поверхности Безье (см. подразд. 13.7.1) и В-сплайн-поверхности (см. подразд. 13.7.2). Напомним, что - заданная кривая в случае поверхностей Кунса [см. (13.18)], а в двух других — многочлен Безье [см. (13.31)] и В-сплайн [см. (13.33)] соответственно. То же относится и к остальным граничным кривым. Рассмотрим точку с координатами Для того чтобы определить пересечение поверхности с заданной плоскостью необходимо решить уравнение
В общем случае это уравнение задает зависимость между и и если — выражение, представляющее величину через величину и, то задает кривую на плоскости Использование этого общего подхода непрактично и вместо этого можно попытаться получить численное решение следующих четырех уравнений:
Решение этих уравнений определяют четыре точки, в которых границы конечного участка поверхности пересекаются плоскостью, задаваемой уравнением Если эти уравнения не имеют решения, то это не означает, что плоскость не пересекается с данным участком поверхности, поскольку пересечение может иметь место во внутренней части участка. Силуэт поверхности, спроектированной на плоскость, перпендикулярную координатной оси образован теми точками, в которых касательная плоскость к поверхности параллельна координатной оси Следовательно, нормаль к поверхности не должна иметь компоненту, параллельную этой оси Согласно уравнению (13.5 в) такие точки должны удовлетворять уравнению
где нижние индексы обозначают переменные, по которым берутся частные производные Кроме того, эти точки должны удовлетворять уравнению (174) Если необходимо определить диапазон значений координаты у для конечного участка поверхности, следует определить экстремальные значения по оси у. Последним соответствуют либо точки, находящиеся на границе, либо
участки, на которых изменение значения по оси у равно нулю, а именно:
Для выполнения штриховки требуется определить точные координаты, соответствующие определенному значению х, т. е. необходимо решить систему уравнений, включающую уравнение (17.6) и уравнение
Все эти уравнения — нелинейные, и для их решения обычно используются численные методы, предусматривающие предварительный выбор некоторого решения и его уточнение при помощи итерационных процедур В этом случае чрезвычайно важное значение приобретает однородность строк развертки по наблюдаемости, так как решения, полученные для некоторой строки, можно использовать в качестве предварительной оценки решения для следующей строки. Аналитическое решение оказывается возможным лишь в очень простых случаях. Приведем один из них в качестве примера, иллюстрирующего не столько метод решения, сколько используемые понятия.
Пример 17.1. Рассмотрим шаровой спектр, задаваемый следующими урав-
Уравнение записанное в непараметрической форме, эквивалентно уравнению
нениями:
Проекция этого шарового сектора на плоскость имеет вид, приведенный на рис. и состоит из точек, удовлетворяющих уравнению (17.96) и неравенству
Сложнее определить проекцию шарового сектора на плоскость . В этом случае граница конечного участка поверхности задается не приведенными выше
Исключив переменную из уравнений устанавливаем, что проекция границы представляет собой эллипс, определяемый уравнением
Если используется параметрическая форма, то справедливо соотношение
значениями , а определяется как пересечение сферы и плоскости:
Правая часть равна нулю при или . В первом случае а во втором Мы получили параметрическое уравнение эллипса для трехмерного случая. Для получения его
проекции на плоскость необходимо просто не учитывать значение Читатель может самостоятельно убедиться в том, что такая проекция эквивалентна уравнению (17.11). Любому фиксированному значению у соответствует некоторая пара значений х, определяемая из выражения Однако только одно из них соответствует границе проекции. Для того чтобы найти силуэт, решаются уравнения (17.7), что дает в результате значение которое равно нулю при или . Обращаясь к непараметрическому уравнению, находим, что . Итак, силуэт представляет собой окружность следовательно, полная проекция состоит из одной дуги эллипса и одной дуги окружности, что и показано на рис.
Альтернативой решению нелинейных уравнений служит последовательное разбиение конечных участков поверхности, продолжаемое до тех пор, пока они не приобретут размеры, позволяющие использовать для их аппроксимации многоугольники. В основе этого подхода лежит теорема 10.1, утверждающая, что область определения любого многочлена Безье можно разделить пополам, причем каждое из возникающих в результате подмножеств кривых также является многочленом Безье. Аналогичные результаты можно получить для кривых других типов.