Опубликован: 27.12.2010 | Доступ: свободный | Студентов: 813 / 130 | Оценка: 5.00 / 5.00 | Длительность: 18:38:00
ISBN: 978-5-9556-0117-5
Специальности: Математик
Лекция 6:

Кривые и поверхности в компьютерной геометрии, II

Аннотация: В лекции рассматриваются бета-кривые; поверхности, определяемые матрицами опорных точек и весов и поверхности, затягивающие заданные граничные контуры.

B-кривые (бета-кривые)

Основными недостатками кривых Безье являются следующие:

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

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

Вспомним, что рациональная кривая Безье, построенная по точкам p_0, \dots, p_n с весами \omega_0, \dots , \omega_n, определялась формулой

r_0(t;n)=\frac{\sum_{i=0}^{n}C_n^it^i(1-t)^{n-i} \omega_ip_i}{\sum_{i=0}^n C_n^it^i(1-t)^{n-i} \omega_i}=\frac{\sum_{i=0}^n B_i^n(t) \omega_ip_i}{\sum_{i=0}^n B_i^n(t) \omega_i}, ( 6.1)

где \{B_i^n(t) = C_n^ii t^i (1 -t)^{n-i}\} - базис Бернштейна на [0,1].

Из формулы (6.1) видно, что глобальное влияние каждой опорной точки p_i на всю кривую происходит из-за того, что каждая из функций B_i^n не равна нулю на всем интервале (0,1). Если бы вместо функций Бернштейна в формуле (6.1) выступали функции с локальными носителями, существенно меньшими, чем область определения параметра кривой t, то удалось бы как локализовать влияние отдельной точки на всю кривую, так и добиться (за счет выбора таких функций) прохождения кривой через некоторую заданную точку.

Поэтому поставим задачу следующим образом. Пусть даны опорные точки p_1,\dots., p_n с весами \omega_1,\dots ,\omega_n. Определим кривую r(t) по формуле

r(t)=\frac{\sum_{i=1}^nN_i(t) \omega_ip_i}{\sum_{i=1}^nN_i(t) \omega_i}, t_{min} \le t \le t_{max}, ( 6.2)

где N_i ( t) - набор кусочно-полиномиальных функций таких, что

  1. N_i (t) = 0 при t\notin [a_i, b_i]\subset  [t_{min}, t_{max}] ;
  2. для любой гладкой функции f(t) существует линейная комбинация \sum c_iN_i(t) , интерполирующая функцию f(t) в заданных узлах \{t_i\}_{i=1}^n

    f(t_i)=\sum_{j=1}^nc_jN_j(t_i), i=1, \dots, n;
  3. \sum_{i=1}^nN_i (t) = 1 для каждого t \in  [t_{min},t_{max}].

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

Решение поставленной задачи основывается на понятии разделенных разностей и называется В-кривой. В-кривые обобщают кривые Безье.

Разделенные разности

Пусть имеется гладкая на каждом отрезке [t_i,t_{i+1}] функция f(t) и фиксированы некоторые значения t_1, \dots , t_{m+1} переменной t (не обязательно различные и не обязательно упорядоченные по возрастанию или убыванию t ). Мы также будем рассматривать переменное значение t, которое будем считать первым в последовательности. Поскольку оно предшествует значению t_1, припишем ему индекс 0 (хотя в большинстве случаев будем обозначать его просто t без индекса): t_0 = t, t_1, \dots, t_{m+1}. Обозначим f_i = f(t_i), f_t = f(t) = f(t_0) = f_0. Определим оператор правого сдвига E:

Et_i = t_{i+1},\\
Ef_i = f_{i+1}\\
 (0 \le i \le m).

Определение 6.1.1. Разделенной разностью функции f(t) в узле t_i порядка k \le m - i + 1 называется величина

R^{(k)}f_i=\frac{R^{(k-1)}(E-1)f_i}{(E^k-1)t_i}=\frac{R^{(k-1)}f_{i+1}-R^{(k-1)}f_i}{t_{i+k}-t_i},\\
R^{(0)}f_i=f_i. ( 6.3)

Разделенная разность является дискретным аналогом операции дифференцирования соответствующего порядка.

При этом если t_i = t_{i+1} = \dots = t_{i+k}, то в правой части (6.3) появляется отношение вида \frac 00, которое по определению полагается равным

R^{(k)}f_i=lim_{\delta_1, \dots, \delta_k \to 0, \delta_i > 0} R_{\delta_1, \dots, \delta_k}^{(k)}f_i

где R_{\delta_1, \dots, \delta_k}^{(k)}f_i определяется по возмущенным узлам \tilde t_{i+j}=t_i+\delta_1 + \dots, + \delta_j, где 1 \le j \le k, \delta_j > 0 .

Теорема 6.1. Если t_i = t_{i+1} = \dots = t_{i+k}, то

Пример 6.1.1. Разделенная разность пятого порядка функции cos\ (t) как функция первого узла (программа не вычисляет производные при совпадении узлов):

In[1]:=
    DynamicModule [{n = 5, tt, F, h, L, t, t2, t3, t4, t5, f, p, S, z},
        f [t_] := Cos [t] ; 
    Manipulate[
       tt = Join[{t} , ss] ;
       p[i_, s_] := Apply [ Times , (s - tt [ [#] ] ) &/@ Drop [Range [n] , {i}]];
       S = Flatten [Table [Table [ss[ [j] ] - ss [ [i] ] , {i, 1, j - 1}] ,
         {j, 2, Length[ss]}]];
     z = Apply [ Times , S ] ; 
     If[z ≠ 0, 
       L = Table [l/p[i, tt[[i]]] , {i, 1, n} ] ; 
       F = Table [f [tt[[i]]], {i, 1, n}]; 
       h=F.L/. t -> 0; 
        Show[ 
          Plot[{f [t] , F.L/h), {t, -20, 20), PlotRange -> {{-25, 25} , {-10, 10}}] , 
          Graphics[{Red, PointSize[Large],
            Point[Table[{ss[[i]], 0} , {i, 1, Length[tt] - 1}]] , 
            Text[ToString[#] , {ss [[#]]+1.2 , 0}] &/@ Range [4] , Axes -> True} ]
          ]
        Show[Graphics[Text["Узлы совпадают"], 
          PlotRange -> {{-25, 25}, {-20, 20}}]]
      ]
     {{ss, {-7.2, 0.7, 5.2, 12.0}, "Узлы"}, 
       With[{r = Range[1, Length[tt] -1]}, 
         Grid[ 
           {Spacer [3] , Subscript [Style [" t" , Italic], # - 1] ,
                 Slider [Dynamic@ss[[.#l]] , {-20, 20, .01}, Appearance -> "UpArrow" , 
                    ImageSize -> {200, 12}], Dynamic@ss [[#1]] } & /@ r] ] &, 
              ControlPlacement -> Bottom} , TrackedSymbols -> {ss} , 
      SaveDef initions -> True ] ]

Задача 6.1.1. Обратите внимание, что разделенная разность быстро убывает при удалении вправо и влево от крайних узлов. Каков порядок этого убывания?

Задача 6.1.2. Написать программу, которая бы учитывала совпадение узлов.

Олег Корсак
Олег Корсак
Латвия, Рига
Александр Дронов
Александр Дронов
Россия, Воронеж, Воронежский государственный технический университет, 1995