Глава IV
4.5. Производные NURBS поверхности

Производные `S^w(u,v)` вычисляются по формулам (3.17) - (3.24). Выведем теперь формулы для производных `S(u,v)` с точки зрения тех `S^w(u,v)`. Пусть

`S(u,v)={w(u,v)S(u,v)}/{w(u,v)}={A(u,v)}/{w(u,v)}`

где `A(u,v)` является числителем `S(u,v)` ( уравнение [4.11]). Затем

`S_α(u,v)=(A_α(u,v)-w_α(u,v)S(u,v))/{w(u,v)}`(4.19)

где `α` обозначает либо `u` или `v`.

В целом

`A^{(k,l)}=[(wS)^k]^l=(sum_(i=0)^k((k),(i))w^{(i,0)}S^{(k-i,0)})^l=sum_(i=0)^k((k),(i))sum_(j=0)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)}` `=w^{(0,0)}S^{(k,l)}+sum_(i=1)^k((k),(i))w^{(i,0)}S^{(k-i,l)}+sum_(j=1)^l((l),(j))w^{(0,j)}S^{(k,l-j)}` `+sum_(i=1)^k((k),(i))sum_(j=1)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)}`

и отсюда следует, что

`S^{(k,l)}=1/w(A^{(k,l)}-sum_(i=1)^k((k),(i))w^{(i,0)}S^{(k-i,l)}-sum_(j=1)^l((l),(j))w^{(0,j)}S^{(k,l-j)}` `-sum_(i=1)^k((k),(i))sum_(j=1)^l((l),(j))w^{(i,j)}S^{(k-i,l-j)})`(4.20)

Из уравнения (4.20), получаем

`S_{uv}=(A_{uv}-w_{uv} S-w_u S_v-w_v S_u)/w`(4.21)

`S_{u u}=(A_{u u}-2w_uS_u-w_{u u}S)/w`(4.22)

`S_{v v}=(A_{v v}-2w_vS_v-w_{v v}S)/w`(4.23)

Из уравнений (3.24), (4.19) и (4.20)

`S_u(0,0)=p/u_(p+1)w_{1,0}/w_{0,0}(P_{1,0}-P_{0,0})`(4.24)

`S_v(0,0)=q/v_(q+1)w_{0,1}/w_{0,0}(P_{0,1}-P_{0,0})`(4.25)

`S_{uv}(0,0)={pq}/(w_{0,0}u_(p+1)v_(q+1))(w_{1,1}P_{1,1}-(w_{1,0}w_{0,1})/w_{0,0}(P_{1,0}-P_{0,1})` `+((2w_{1,0}w_{0,1})/w_{0,0} -w_{1,1})P_{0,0})`(4.26)

Рисунок 4.13 показывает, частные производные первого и второго порядка NURBS поверхности. Первые производные уменьшены на 1⁄2, а вторые производные уменьшены на 1⁄3.

Рисунок 4.13. Частные производные первого и второго порядка бикубической поверхности NURBS, вычисленные при `u=`3⁄4 и `v=`1⁄4.

Теперь предположим, что `(u,v)` фиксированы, и что все производные `A^{(k,l)}`, `w^{(k,l)}` для `k,l≥0` и `0≤k+l≤d`, были вычислены и загружаются в массивы Aders и wders, соответственно. Алгоритм A4.4 вычисляет точку `S(u,v)` и производные `S^{(k,l)}(u,v)`, `0≤k+l≤d`. Bin[][] содержит предварительно вычисленные биномиальные коэффициенты.

Алгоритм А4.4

RatSurfaceDerivs(Aders,wders,d,SKL)
{ /* Вычисляем  производные  S(u,v) */
  /* Вход: Aders,wders,d */
  /* Выход: SKL */
for (k=0;  k<=d; k++)
   for (l=0;  l<=d-k;  l++)
      {
      v = Aders[k][l];
      for (j=1;  j<=l;  j++)
         v = v - Bin[l][j]*wders[0][j]*SKL[k][l-j];
      for (i=1;  i<=k;  i++)
         {
         v = v - Bin[k][i]*wders[i][0]*SKL[k-i][l];
         v2 = 0.0;
         for (j=1;  j<=l;  j++)
            v2 = v2 + Bin[l][j]*wders[i][j]*SKL[k-i][l-j];
         v = v - Bin[k][i]*v2;
         }
      SKL[k][l]  = v/wders[0][0];
      }
}
    

Упражнения

  1. Пусть `U={0,0,0,`1⁄3,2⁄3,`1,1,1}` и `{w_4,...,w_4}={1,4,1,1,1}`. Используя рекуррентную формулу Cox-deBoor (уравнение [2.5]) и уравнение (4.2), вы­числите пять квадратичных рациональных функций, `R_{i,2}(u)`, `0≤i≤4`. Гра­фики этих функций показаны на рис. 4.5a. Предположим, что `{P_0,...,P_4}=``{(0,0),(1,1),(3,2),(4,1),(5,-1)}` являются контрольными точками в пло­ско­сти `xy`, Вычислить рациональные координатные функции `x(u)` и `y(u)`, представляющие `C(u)` в интервале `u in [`1⁄3,2⁄3).
  2. В примере Пр4.2 приведена квадратичная рациональная круговая дуга Безье; вычислети `C''(1)`.
  3. Пусть `C^w(u)=∑_{i=0}^1N_{i,1}(u)P_i^w` отрезок прямой в плоскости `xy`, где `P_0=(0,1)`, `P_1=(2,0)`, `w_0=1`, `w_1=3` и `U={0,0,1,1}`. Выведите ра­ци­он­аль­ные функции, представляющие координаты `x` и `у` этого отрезка, то есть `x(u)` и `y(u)`, где `C(u)=(x(u),y(u))`. Вычислить `C'(0)`, используя формулу (4.9) и `C''(0)`, используя уравнения (4.8) и (3.9). Затем установите `w_1=1` и пересчитайте `x(u)`, `y(u)`, `C'(0)` и `C''(0)`.
  4. Пусть `S^w(u,v)=∑_{i=0}^1∑_{j=0}^1N_{i,1}(u)N_{j,1}(v)P_{i,j}^w`, где `{P_{0,0},P_{1,0},` `P_{0,1},P_{1,1}}={(0,0,1),(0,1,3),(2,1,1),(2,0,3)}`, `{w_{0,0},w_{1,0},w_{0,1},``w_{1,1}}={2,1,1,1}` и `U=V={0,0,1,1}`. Выведите четыре рациональных базисных функции `R_{i,j}(u,v)`, и рациональные координатные функции `x(u,v)`, `y(u,v)` и `z(u,v)` из поверхность `S(u,v)`.
  5. Из `S^w(n,v)` в упражнении 4.4 выведите две рациональные изопараметри­ческие кривые `C_{u_0}^w(u)` и `C_{v_0}^w(u)` для `u_0=`1⁄3 и `v_0=`1⁄2. Затем оцените кривые `C_{u_0}(u)` и `C_{v_0}(u)` при `v=`1⁄2 и `u=`1⁄3 соответственно. Проверьте свои результа­ты, подставив `(u,v)=`(1⁄3,1⁄2) в функции рациональных координат, полученные в упражнении 4.4.
  6. Пусть `S^w(u,v)=∑_{i=0}^1∑_{j=0}^1N_{i,1}(u)N_{j,1}(v)P_{i,j}^w` - будет поверхно­стью, приведённой в упражнении 4.4. Поскольку `N_{0,1}`(1⁄2)`=N_{1,1}`(1⁄2)=1⁄2, это следует из того

    `S^w(1/2,1/2)=1/4(P_{0,0}^w+P_{0,1}^w+P_{1,0}^w+P_{1,1}^w)=(1,1/2,9/4,5/4)`

    Вычислите `S_u`(1⁄2,1⁄2), `S_v`(1⁄2,1⁄2),`S_{uv}`(1⁄2,1⁄2),`S_{u u}`(1⁄2,1⁄2).