Сглаживание B-сплайнамиМатематическое представление тела, составленного из простых геометрических форм (сфер, цилиндров или конусов) несложно. Но очень часто это не так; кузова автомобилей, поверхности самолетов, флюзеляжи и многое другое не так-то просто описать. Процедура, обычно используемая в этих случаях, состоит обычно в следующем:
Можно строить достаточно гладкие кривые и поверхности с использованием полиномов. Допустим, что мы хотим построить поверхность в виде графика функции z = z(x, y). Линия y = const на этой поверхности будет представлена линией z = z(x), она будет проходить через последовательность точек (x0, z0), ..., (xi, zi), ..., (xn, zn) с x0 < ... < xi < ... < xn. Наша цель провести через эти точки составную кривую f(x), имеющую следующие свойства:
Полученная гладкая кривая называется кубическим сплайном. Термин «сплайн» возник по аналогии: это название чертежного инструмента тонкой металлической линейки, которая может изгибаться так, чтобы проходить через заданные точки. Физически такая кривая минимизирует энергию внутренних напряжений. Математически имеет минимальную среднеквадратичную кривизну, то есть она наиболее гладкая. Сплайны имеют много приложений в конструировании криволинейных форм. Однако они имеют и некоторые ограничения:
Первое ограничение можно устранить с помощью B-сплайна. Общая форма полученной в этом случае кривой показана на рис. 20.1. На этом рисунке сплайн продолжен от его конечных точек xi-4, xi прямыми линиями, идущими вдоль оси x. В результате получается кубический сплайн на любом числе отрезков, но он не равен нулю только на четырех из них. Такая функция называется B-сплайном (или фундаментальным сплайном) четвертого порядка (или третьей степени). Про него говорят, что он имеет минимальный носитель (носитель это число отрезков, на которых сплайн отличен от нуля). Заметим, что кубический B-сплайн полностью определяется множеством узлов, на которых он определен, и только одной заданной величиной z. В более общем виде B-сплайн Mmi(x) порядка m (или степени m - 1) на данном множестве узлов везде равен нулю, кроме m последовательных отрезков xi-m < x < xi. Опять-таки Mmi(x) определяется множеством узлов и одной величиной z. Принято исключать последнюю степень свободы и фиксировать амплитуду B-сплайна некоторым стандартным образом. Часто удобно для вычислений использовать нормализованный B-сплайн Nmi(x), связанный с Mmi(x) соотношением Nmi(x) = (xi - xi-m)Mmi(x). Любой сплайн порядка m на множестве узлов x0, x1, ...,
xn может быть выражен в виде линейной комбинации B-сплайнов,
определенных на том же множестве узлов, расширенном (m - 1) дополнительными
узлами на каждом из концов интервала, которые можно выбрать произвольно:
x-m+1, x-m+2, ..., x-1 и xn+1, ...,
xn+m-1. Можно построить m + n - 1 последовательных B-сплайнов на
расширенном множестве узлов, каждый из которых отличен от нуля на m
последовательных отрезках. Поэтому можно записать: Если имеется множество векторов r0, r1, ..., rn, то можно использовать их: r(u) = Sri * N4, i+1(u) (суммирование ведется по i = 0, ..., n). Так как имеется (n + 1) векторных коэффициентов, то необходим набор из (n + 1) B-сплайнов. Последняя формула для 0 <= u <= n - 2 является уравнением кривой, образованной кубическими B-сплайнами. СвойстваНекоторые простейшие свойства следуют из тождества SN4, i+1 = 1, 0 <= u <= n - 2, i = 0..n. При u = 0 следует: r(0) = N42(0)(r1 - r0). Из этого следует, что если r0, r1, .., rn вершины некоторой замкнутой ломанной, то кривая, построенная на основе B-сплайна, начинается в r0 и ее касательная в этой точке имеет направление (r1 - r0). Аналогичное утверждение верно и для другого конца. Главное преимущество этого сплайна заключается в том, что изменение одной из вершин влечет за собой изменение только четырех отрезков кривой. Далее, мы также можем построить кривую, аппроксимирующую ломанную с любым желаемым числом сторон. Отрезок сплайна всегда лежит в выпуклой оболочке: Важным следствием этой выпуклой оболочки является вырождение ее в прямую линию, если 4 последовательные вершины ломанной коллинеарны, значит соответствующий сегмент кривой должен быть прямолинейным. Имеется еще 2 полезных факта:
Эти точки, как показано на рис. 20.3, лежат на 1/3 расстояния от rk на прямой, соединяющей rk с серединой отрезка между rk-1 и rk+1. |
|