Построение и работа с рациональными сплайнами

Пример рационального сплайна: Круг

Для примера,

circle = rsmak('circle');

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

fnplt(circle), axis square

легко показывает; получившиеся выходы являются кругом на рисунке A Circle и Эллипсом, Оба Заданы Рациональным Сплайном.

Легко манипулировать этим кругом, чтобы получить родственные формы. Например, следующие команды растягивают круг в эллипс, вращают эллипс на 45 степени и перемещают его на (1,1), а затем строят график поверх круга.

ellipse = fncmb(circle,[2 0;0 1]);
s45 = 1/sqrt(2);
rtellipse = fncmb(fncmb(ellipse, [s45 -s45;s45 s45]), [1;1] );
hold on, fnplt(rtellipse), hold off

В качестве следующего примера, «круг», только что сконструированный, складывается из четырех частей. Чтобы выделить первый такой кусок, используйте следующие команды:

quarter = fnbrk(fn2fm(circle,'rp'),1);
hold on, fnplt(quarter,3), hold off

В первой команде fn2fm используется для изменения форм, от одной на основе B-формы до одной на основе ppform, а затем fnbrk используется для извлечения первой части, и затем эта часть строится на верхнюю часть окружности в окружности и эллипсе, заданных рациональным сплайном, с шириной линии 3 чтобы сделать его выделяться.

Круг и эллипс, оба заданы рациональным сплайном

Пример рационального сплайна: сфера

Как пример поверхности, команда rsmak('southcap') предоставляет 3-векторный рациональный бикубический полином, значения которого на единичном квадрате [-1.. 1] ^ 2 заполните часть сферы единичного радиуса. Примыкайте к нему пять подходящих вращений, и вы получаете сферу единичного радиуса точно. Для рисунка команды генерируют две трети этой сферы, как показано на Части Сферы, Образованной Четырьмя Вращениями Квартального Рационального.

southcap = rsmak('southcap'); fnplt(southcap)
xpcap = fncmb(southcap,[0 0 -1;0 1 0;1 0 0]);
ypcap = fncmb(xpcap,[0 -1 0; 1 0 0; 0 0 1]);
northcap = fncmb(southcap,-1);
hold on, fnplt(xpcap), fnplt(ypcap), fnplt(northcap)
axis equal, shading interp, view(-115,10), axis off, hold off

Часть сферы, образованной четырьмя вращениями квартального рационального

Функции для работы с рациональными сплайнами

Выбрав представлять рациональный сплайн r = s/ w таким образом обычным сплайном R = [s; w], легко применить к рациональному сплайну все fn... команды в функциях Curve Fitting Toolbox™ spline, за следующими исключениями. Интеграл рационального сплайна не должен быть рациональным сплайном, поэтому нет возможности расширяться fnint к рациональным сплайнам. Производная рационального сплайна снова является рациональным сплайном, но один из примерно двух порядков. По этой причине fnder и fndir не будет касаться рациональных сплайнов. Вместо этого существует команда fntlr для вычисления значения в заданном x всех производных до заданного порядка заданной функции. Если эта функция является рациональной, необходимое вычисление основывается на факторах, приведенной в предыдущем абзаце.

Область команды r = rsmak(shape) обеспечивает рациональные сплайны в rBform, которые описывают точно определенные стандартные геометрические формы, такие как 'circle', 'arc', 'cylinder', 'sphere', 'cone', 'torus'. Область команды fncmb(r,trans) может использоваться, чтобы применить стандартные преобразования к полученной форме. Для примера, если trans является вектором-столбцом правой длины, форма будет переведена этим вектором, в то время как, если trans является подходящей матрицей, подобной повороту, форма будет преобразована этой матрицей.

Область команды r = rscvn(p) создает квадратичную rBFORM тангенциально-непрерывную кривую, состоящую из круглых дуг и проходящую через заданную последовательность, p, точек в плоскости.

Специальная рациональная форма сплайна, называемая NURBS, стала стандартным инструментом в CAGD. NURBS по определению является любым рациональным сплайном, для которого и s и w находятся в одной и той же B-форме, при этом каждый коэффициент для s содержит явно соответствующий коэффициент для w как фактор:

s=iBiv(i)a(:,i),w=iBiv(i)

Нормированные коэффициенты, a (:, i) для сплайна числителя, более легко используются в качестве контрольных точек, чем ненормализованные коэффициенты v (i) a (:, i), используемые в rBform. Тем не менее, этот тулбокс не предоставляет специальной формы NURBS, а только более общий рациональный сплайн, но в обеих B-форме (называемой rBform внутренне) и в ppform (называется rpform внутренне).

Рациональный сплайн circle использованный ранее собран в rsmak кодом, подобным следующему.

x = [1 1 0 -1 -1 -1  0  1 1]; y = [0 1 1  1  0 -1 -1 -1 0];
s45 = 1/sqrt(2); w =[1 s45 1 s45 1 s45 1 s45 1];
circle = rsmak(augknt(0:4,3,2), [w.*x;w.*y;w]);

Обратите внимание на внешний вид сплайна знаменателя как последнего компонента. Также обратите внимание, как коэффициенты сплайна знаменателя появляются здесь явным образом как коэффициенты соответствующих коэффициентов сплайна числителя. Нормированная последовательность коэффициентов [x;y] очень прост; он состоит из вершин и средних точек, в надлежащем порядке, «единичного квадрата». Получившийся многоугольник управления является касательным к окружности в местах, где четыре квадратичные части, которые образуют круг, примыкают.

Подробное обсуждение NURBS смотрите в [Г. Фарин, NURBS, 2-е изд., AKPeters Ltd, 1999] или [Les Piegl and Wayne Tiller, The NURBS Book, 2 изд., Springer-Verlag, 1997].

Похожие темы