Главная > Математика > Геометрическое моделирование
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

4.9. Построение линий пересечения поверхностей

Пересечение плоскостей.

Линия пересечения двух плоскостей

с единичными нормалями находится достаточно просто. Ее направление определяется вектором Если длина вектора z отлична от нуля, то плоскости пересекаются, в противном случае они параллельны или совпадают. Если плоскости пересекаются, то теперь нужно найти точку на линии пересечения. Построим вектор и вычислим его составляющую, параллельную плоскости Далее по формуле (4.7.4) определим точку пересечения линии, проходящей через точку в направлении вектора w, с плоскостью

Плоскости пересекаются по линии

(4.9.1)

Параметры плоскостей, соответствующие точки , определим по формулам

при условии ортогональности пар векторов или по формулам (4.6.6) и (4.6 7) в противном случае. Аналогичным образом можно найти параметры для еще одной точки линии пересечения . Пусть параметры соответствуют точке q на плоскости , а параметры соответствуют этой же точке на плоскости . Построим на плоскостях двухмерные линии

(4.9.2)

Эти линии при каждом параметре t совпадают в пространстве друг с другом и с линией . Линию пересечения плоскостей будем строить в виде совокупности двух двухмерных линий на двух пересекаемых плоскостях. Аналогично линию пересечения поверхностей будем строить в виде совокупности двух двухмерных линий на них.

Частные случаи.

Во многих частных случаях задачу пересечения поверхностей можно решить достаточно просто. Пусть поверхность (3.5.1) получена выдавливанием кривой на плоскости. Если плоская кривая задана координатными функциями и плоскостью , то поверхность выдавливания будет описываться радиус-вектором

При пересечении этой поверхности плоскостью параллельной плоскости , линию пересечения построим из трансформированной копии кривой на плоскости и отрезка прямой линии на поверхности . Трансформированную копию кривой на плоскости обозначим через . Кривая должна быть повернута и перемещена на плоскости в соответствии с взаимной ориентацией базисных векторов и начальных точек плоскостей . Отрезок прямой представляет собой координатную линию на поверхности . Необходимо, чтобы отрезок прямой и кривая расположенные на разных поверхностях, имели одинаковую параметрическую длину

Аналогично можно получить линию пересечения поверхности, полученной вращением кривой на плоскости вокруг оси, принадлежащей этой плоскости, и плоскости, проходящей через ось вращения. Кривую пересечения поверхности вращения плоскостью, ортогональной оси вращения, построим из окружности на плоскости и линии на поверхности.

При построении линии пересечения такими способами следует соблюдать одно правило: линии на пересекаемых поверхностях должны иметь одинаковые области определения параметра и их соответствующие точки на поверхностях должны совпадать в пространстве.

Общий случай пересечения поверхностей.

Обратимся к общему случаю пересечения поверхностей. Пусть требуется найти линию пересечения поверхностей, описываемых радиус-векторами . Каждая точка линии пересечения поверхностей должна удовлетворять векторному уравнению

(4.9.3)

Это векторное уравнение содержит три скалярных уравнения для компонент радиус-векторов поверхностей:

(4.9.4)

и четыре искомых параметра: . Данная задача отличается от рассмотренных тем, что из трех уравнений нужно найти четыре неизвестные величины. Если определить один из четырех параметров, то остальные три можно найти из системы уравнений (4.9.4), т.е. один из параметров может в то же время служить параметром решения или являться однозначной функцией от него.

Рис. 4.9.1. Линии пересечения цилиндрической поверхности и NURBS поверхности

Таким образом, три параметра являются функциями четвертого параметра. Чтобы все четыре параметра были равноправными, представим их все в виде функции некоторого общего параметра t:

(4.9.5)

и придем к тому, что результатом решения системы уравнений (4.9.4) являются две двухмерные линии

Эти линии связаны друг с другом общим параметром и определяют одну и ту же линию в пространстве — линию пересечения поверхностей. На рис. 4.9.1 приведен пример пересечения поверхностей.

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

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

Рис. 4.9.2. Вычисление точки линии пересечения поверхностей по ранее определенным точкам

Пусть первой точке соответствует параметр линии пересечения, а второй точке соответствует параметр линии пересечения поверхностей . Требуется найти точку линии пересечения с параметром t, где Построим плоскость

(4.9.7)

с началом в точке

ортогональную отрезку, проведенному из точки в точку (рис. 4.9.2). Примем за начальные приближения параметры

поверхностей и найдем точку пересечения поверхностей и плоскости из системы шести уравнений, которые в векторной записи имеют вид

(4.9.8)

Эта точка и будет искомой точкой линии пересечения. Далее можно определить любую другую геометрическую информацию линии пересечения поверхностей.

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

Алгоритм построения линий пересечения.

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

На первом этапе, шагая по поверхностям и исследуя их близость, найдем отдельные точки кривых пересечения. Под точками в данном случае будем иметь в виду пары параметров гг, v и а, b на параметрических плоскостях поверхностей. Точки из полученного на первом этапе набора никак не связаны друг с другом и могут принадлежать различным кривым пересечения. Важно только, чтобы от каждой кривой пересечения в наборе присутствовала хотя бы одна точка.

На втором этапе берем любую точку из имеющегося набора и, двигаясь от нее с некоторым шагом сначала в одну сторону затем в другую, найдем точку за точкой искомую совокупность точек линии пересечения. Направление движения дает векторное произведение нормалей к поверхностям. Шаг движения вычислим в соответствии с кривизнами поверхностей в текущей точке. Движение по кривой пересечения закончим, когда дойдем до края одной из поверхностей или когда линия замкнется (новая точка окажется на расстоянии текущего шага от точки старта). В процессе движения будем проверять, не лежат ли вблизи пути следования точки из набора, полученного на первом этапе. Для этого по пути следования будем вычислять расстояние от текущей точки кривой пересечения до каждой точки из набора, полученного на первом этапе. Если вычисленное расстояние до какой-либо точки набора соизмеримо с текущим шагом движения, то эту точку удалим из набора как более ненужную. Так получим совокупность отдельных точек , одной кривой пересечения. При этом в наборе точек, полученном на первом этапе, не будет содержаться ни одной точки данной кривой пересечения. Если в наборе останутся еще точки, то данные поверхности имеют, по крайней мере, еще одну линию пересечения. Совокупность ее точек найдем, взяв любую точку из набора и повторив все сказанное о втором этапе построения. Построение линий закончим, когда в наборе не останется ни одной точки.

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

Для определения начальных точек пересечения на первом этапе решим задачу пересечения линий поверхности с поверхностью . Не изменяющемуся параметру будем сообщать последовательно значения (при этом он проходит с некоторым шагом значения от до ), а затем — (при этом он проходит с некоторым шагом значения от до ). При одном неподвижном параметре из системы уравнений (4.9.4) можно найти остальные три параметра. Далее поменяем поверхности ролями и найдем точки пересечения координатных линий поверхности с поверхностью . Таким образом, мы получим набор некоторых точек, принадлежащих в общем случае различным линиям пересечения заданных поверхностей. В этом наборе нам понадобится по одной точке для построения каждой линии пересечения. Эти точки не должны быть точками касания поверхностей. Если известна некоторая точка линии пересечения, то по ней можно построить и другие точки этой линии.

Возьмем из полученного набора произвольную точку пересечения поверхностей. Пусть ее параметры на первой поверхности равны , а на второй поверхности равны

Построим нормали к поверхностям . Линия пересечения в каждой точке ортогональна нормалям обеих поверхностей, поэтому направление линии пересечения коллинеарно векторному произведению нормалей к поверхностям

(4.9.9)

Выберем в качестве направления движения к следующей точке линии пересечения положительное направление вектора t. Далее, по формулам (4.2.4) и (4.2.5) определим возможный шаг смещения по каждому из четырех параметров . Если одному из параметров дать приращение и сделать его неподвижным, то из системы уравнений (4.9.4) можно найти остальные параметры. Важно только, чтобы изменение каждого из параметров по модулю не превышало найденные возможные шаги. В качестве фиксированного параметра, которому будет дано приращение, выберем тот, направление движения вдоль которого ближе к направлению кривой пересечения, т. е. составляет меньший угол с вектором t. Для этого вычислим частные производные радиус-векторов поверхностей по параметрам

которые и дают направления движения вдоль параметров.

На рис. 4.9.3 показаны отправная точка векторы производных и сфера смещения, внутри которой приращения всех параметров не превышают, соответственно, .

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

Следующая точка линии пересечения не должна выйти за сферу смещения. Радиус сферы смещения возьмем равным наименьшей по абсолютной величине проекции векторов на вектор касательной

(4.9.11)

Для следующей точки линии пересечения в качестве нулевых приближений примем значения параметров:

(4.9.13)

Тот параметр, производная по которому составляет меньший угол (по абсолютной величине) с направлением линии пересечения, сделаем неподвижным. Далее, решив систему уравнений (4.9.4), в которой неподвижный параметр будет считаться известным и неизменным, получим остальные три параметра. Таким образом, найдем параметры на первой поверхности и параметры на второй поверхности для следующей точки линии пересечения. Продолжим этот процесс и дальше пока не дойдем до края одной из поверхностей или не окажемся вблизи точки отправления.

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

Если в процессе движения мы оказались вблизи границы одной из поверхностей и движемся в ее направлении (имеется в виду прямоугольная граница), то в качестве неподвижного параметра следует выбрать тот, который находится рядом со своей границей. Важно, чтобы были найдены параметры, соответствующие крайним точкам линии пересечения. Для этого функции поверхностей, определяющие векторы точек и их производных, должны корректировать параметры, если они вышли за область определения.

После определения крайней точки линии пересечения поверхностей продолжим движение и поиск параметров линии пересечения в другом направлении от точки старта (в противоположном вектору t направлении). Такая линия не может быть замкнутой, поэтому движение будем продолжать до тех пор, пока не будут найдены параметры другого края линии пересечения поверхностей.

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

Если на некотором участке пересекаемые поверхности имеют близкие (почти коллинеарные) нормали, то кривая пересечения в этом месте может сильно менять свое направление. Шаг по фиксированному параметру в этой области должен быть уменьшен.

Если линии пересечения поверхностей проходят через точку касания, то в этой точке поверхности имеют коллинеарные нормали. Матрица линеаризованной системы уравнений (4.9.4) в этой точке будет иметь нулевой определитель и из этой системы уравнений нельзя найти параметры точки касания поверхностей.

В этом случае вместо системы уравнений (4.9.4) можно решать систему четырех скалярных уравнений

(49.14)

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

Итерационный процесс решения системы (4.9.14) закончим, когда на очередной итерации приращение каждого из параметров станет меньше некоторой заданной величины е. Отклонению полученных в результате решения параметров от их точных значений соответствует максимальное отклонение радиус-вектора полученной точки от его истинного значения. Это отклонение равно произведению погрешности параметров и длины максимальной по модулю производной радиус-векторов:

(4.9.15)

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

Итак, в общем случае описанным выше способом каждую линию пересечения двух поверхностей будем представлять упорядоченной совокупностью параметров , или упорядоченной совокупностью координат двухмерных точек на параметрических плоскостях. Оформим эти совокупности в виде двух ломаных (2.4.1) линий на соответствующих поверхностях. Эти ломаные имеют общий параметр, при целочисленных значениях параметра они совпадают с линией пересечения, при других значениях параметра они проходят вблизи линии пересечения, их концы совпадают с концами линии пересечения поверхностей. Для любого значения параметра ломаных могут быть получены параметры точки пересечения поверхностей с любой заданной точностью из решения системы (4.9.8). Кривая пересечения поверхностей в данном представлении ничем не отличается от любой другой кривой или сплайна. При обращении к кривой пересечения с некоторым параметром она может выдать любую геометрическую информацию о себе.

Пусть мы имеем для линии пересечения поверхностей точные параметрические зависимости (4.9.5). Тогда радиус-вектор линии пересечения поверхностей вычислим как среднее арифметическое радиус-векторов точек на пересекаемых поверхностях

Производные радиус-вектора линии пересечения поверхностей вычислим как среднее арифметическое производных кривых на поверхностях по формулам

Производные радиус-векторов кривых на поверхностях вычисляются по формулам (1.7.20)

(4.9.21)

Если параметрические зависимости (4.9.5) не являются точными и дают точки линий пересечения при целочисленных значениях параметра t (при других значениях параметра проходят вблизи линии пересечения), то формулы (4.9.16)-(4.9.19) будут верны только приближенно. Точные значения радиус-вектора линии пересечения поверхностей и ее производных можно получить из системы уравнений (4.9.8).

<< Предыдущий параграф Следующий параграф >>
Оглавление