Кривая C(u) является вектор-функция одного параметра. Это отображение (деформации) сегмента прямой линии в евклидовом трехмерном пространстве. Поверхность вектор-функция двух параметров, u и v, и представляет собой отображение области, R, uv плоскости в евклидовом трехмерном пространстве. Таким образом, она имеет вид S(u,v)=(x(u,v),y(u,v),z(u,v)), (u,v)∈R. Есть много схем для представления поверхностей. Они отличаются в координатных функциях, используемых в типах областей R. Наверное, самый простой метод, и одним из наиболее широко используемых в геометрических приложениях моделирования, является схема тензорного произведения. Это метод, который мы используем в оставшейся части этой книги.
Метод тензорного произведения основан на схеме двунаправленной кривой. Он использует базисные функции и геометрические коэффициенты. Базисные функции двумерной функции u и v, которые построены в виде продуктов одномерных базисных функций. Геометрические коэффициенты расположены (топологически) в двух направлениях, n×m сети. Таким образом, поверхность тензорного произведения имеет вид
S(u,v)=(x(u,v),y(u,v),z(u,v))=n∑i=0m∑j=0fi(u)gi(v)bi,j (1.20)
где {bi,j=(xi,j,yi,j,zi,j)0≤u,v≤1
Обратите внимание, что домен (u,v) отображается как квадрат (в общем прямоугольником). Отметим также, что S(u,v) имеет матричную форму
S(u,v)=[fi(u)]T[bi,j][gi(v)]
где [fi(u)]T это (1)×(n+1) строчный вектор, [gi(v)] вектор с (m+1)×(1) колонок, и [bi,j] это (n+1)×(m+1) матрица трёхмерных точек.
В качестве примера рассмотрим степенную базисную поверхность
S(u,v)=n∑i=0m∑j=0ai,juivj=[ui]T[ai,j][vj] {ai,j=(xi,j,yi,j,zi,j)0≤u,v≤1(1.21)
Мы имеем fi(u)=ui и gi(v)=vj, и базисные функции как результат, {uivj}. Если мы зафиксируем u=u0, тогда
Cu0(v)=S(u0,v)=m∑j=0n∑i=0ai,jui0vj=m∑j=0bj(u0)vj (1.22)
где bj(u0)=n∑i=0ai,jui0
это степенная базисная кривая лежащая на поверхности, S(u,v). Кроме того, Cv0(u) это степенная базисная кривая лежащая на S(u,v); и кривые Cu0(v) и Cv0(u) пересекаются в точке на поверхности, S(u0,v0). Эти кривые называются изопараметрические кривые (или изокривые). Cu0(v) называются v кривая, Cv0(u) называются u кривая (смотри рис 1.23).
Выражение (1.21) может быть записано
Рисунок 1.23. Поверхность тензорного произведения с изопараметрическими кривыми.
S(u,v)={a0,0+a0,1v+a0,2v2+⋯+a0,mvm}⏟b0
+u{a1,0+a1,1v+a1,2v2+⋯+a1,mvm}⏟b1
+u2{a2,0+a2,1v+a2,2v2+⋯+a2,mvm}⏟b2
⋮
+un{an,0+an,1v+an,2v2+⋯+an,mvm}⏟bn
=b0+b1u+b2u2+⋯+bnun
Члены в фигурных скобках простые многочлены, которые могут быть вычислены алгоритмом Горнера (А1.1), уступив b0,b1,…,bn. Используя bs и перезапуская алгоритм, мы получаем точку на поверхности. Таким образом, у нас есть алгоритм 1.6.
Horner2(a,n,m,u0,v0,S) { /* Вычисление точку на степенной базисной поверхности. */ /* Вход: a,n,m,u0,v0 */ /* Выход: S */ for (i=0; i<=n; i++) Horner1(a[i][],m,v0,b[i]); /* a[i][] это i-тая строка */ Horner1(b,n,u0,S);
Алгоритм А1.6 это обычный алгоритм поверхностей тензорного произведения. Они, как правило, могут быть получены путем расширения от алгоритмов кривой, часто путем обработки n (или m) строк коэффициентов (в виде кривых) в одном направлении, и дальнейшей обработки одной или несколько строк в другом направлении.
Дифференцируя уравнение (1.21), получаем
Su(u,v)=n∑i=0m∑j=0iai,jui-1vj Sv(u,v)=n∑i=0m∑j=0jai,juivj-1
Обратите внимание, что при фиксированном (u0,v0), Su(u0,v0)=Cv0′(u0) и Sv(u0,v0)=Cu0′(v0). Нормальный вектор, N, вычисляется по формуле (1.4).
Нерациональные поверхности Безье получаются путем двухмерной сети контрольных точек и продуктов одномерных многочленов Бернштейна
S(u,v)=n∑i=0m∑j=0Bi,n(u)Bj,m(v)Pi,j 0≤u,v≤1 (1.23)
Базисная функция B0,2(u)B1,3(v) показана на рис 1.24а, и рис 1.24б показаны квадратная×кубическая поверхность Безье
Рисунок 1.24. (а) Базисная функция тензорного произведения Безье, B0,2(u)B1,3(v); (б) квадратичная х кубическая поверхность Безье..
Для фиксированного u=u0
Cu0(v)=S(u0,v)=n∑i=0m∑j=0Bi,n(u0)Bj,m(v)Pi,j
=m∑j=0Bj,m(v)(n∑i=0Bi,n(u0)Pi,j)
=m∑j=0Bj,m(v)Qj(u0) (1.24)
где Qj(u0)=n∑i=0Bi,n(u0)Pi,j j=0,…,m
это кривая Безье лежащая на поверхности. Аналогично, Cv0(u)=n∑i=0Bi,n(u)Qi(v0) является u изокривой Безье лежащей на поверхности.
Как и в случае кривых, из-за их превосходных свойств Безье поверхности лучше подходят для геометрических приложений моделирования, чем степенные базисные поверхности. В частности,
Интересно отметить, что не существует никаких известных уменьшения вариации свойств для поверхностей Безье.
Алгоритм де Кастельжо (А1.5) также легко расширяется для вычисления точек на поверхности Безье. Обратимся к формуле (1.24) и рис 1.25. Пусть (u0,v0) фиксированы. При фиксированном j0, Qj0(u0)=∑ni=0Bi,n(u0)Pi,j0 точка, полученная путем применения алгоритма де Кастельжо к j0 ряд контрольных точек, то есть до {Pi,j0}, i=0,…,n. Поэтому, применяя алгоритм де Кастельжо (m+1) раз дает Cu0(v); и применяя его еще раз, чтобы Cu0(v) на v=v0 даёт Cu0(v)=S(u0,v0). Этот процесс требует
Рисунок 1.25. Алгоритм де Кастелжо для поверхности Безье.
n(n+1)(m+1)2+m(m+1)2 (1.25)
линейной интерполяции (смотри Упражнение 1.21). В силу симметрии, мы можем вычислить {C_{v_0}(u)} впервые (n+1 приложения де Кастельжо), а затем вычислить `C_{v_0}(u)=S(u_0,v_0)}. Это требует
m(n+1)(m+1)2+n(n+1)2 (1.26)
линейной интерполяции. Таким образом, если n>m вычисление первым Cv0(u), а затем Cv0(u0); в противном случае, вычислить сначала Cu0(v), а затем Cu0(v0).
deCasteljau2(P,n,m,u0,v0,S) { /* Вычисление точку на поверхности Безье. */ /* по де Кастельжо */ /* Вход: P,n,m,u0,v0 */ /* Выход: S */ If (n <= m) { for (j=0; j<=n; j++) /* P[j][] это j-тая строка */ deCasteljau1(P[j][],n,u0,Q[j]); deCasteljau1(Q,m,v0,S); } else { for (i=0; i<=n; i++) deCasteljau1(P[][i],m,v0,Q[j]); deCasteljau1(Q,n,u0,S); } }
Определим рациональную поверхность Безье для перспективной проекции из четырехмерного многочлена поверхности Безье (смотри [Pieg86; Fari89])
Sw(u,v)=n∑i=0m∑j=0Bi,n(u0)Bj,m(v)Pwi,j (1.27)
и S(u,v)=H{Sw(u,v)}=∑ni=0∑mj=0Bi,n(u)Bj,m(v)wi,jPi,j∑ni=0∑mj=0Bi,n(u)Bj,m(v)wi,j
=n∑i=0m∑j=0Ri,n(u,v)Pi,j (1.28)
где Ri,n(u,v)=Bi,n(u)Bj,m(v)wi,j∑nr=0∑ms=0Br,n(u)Bs,m(v)wr,s
Обратите внимание, что Ri,n(u,v) являются рациональными функциями, но они не являются продуктами других базисных функций. Следовательно, S(u,v) не поверхность тензорного произведения, но есть Sw(u,v). Как с кривыми, мы как правило, работают с формулой (1.27) и проецируем результат. Рисунок 1.26a показывает рациональную базисную функцию, а на рис 1.26б изображает квадратичную×кубическую рациональную поверхность Безье. Сравните эти рисунки с рисунками 1.24а и 1.24б.
Предполагая, wi,j>0 для всех i и j, свойств, перечисленных ранее для нерациональных поверхностей Безье (и функции продукта Bi,n(u)Bj,m(v) естественно распространяются для рациональных поверхностей Безье. Кроме того, если wi,j=1 для всех i и j, тогда Ri,n(u,v)=Bi,n(u)Bj,m(v), и соответствующая поверхность нерациональная.
Рисунок 1.26. (а) Рациональная базисная функция R0,i(u,v) (где w0,1=5 и все остальные веса равны единице); (б) квадратичная × кубическая рациональная поверхность Безье.
Примеры
Пример1.15 | Давайте построим цилиндрическую лоскутную поверхность. Из раздела 1.4 мы
знаем, что
Cw(u)=2∑i=0Bi,2(u)Pwi Для {Pwi}={(0,1,0,1),(0,1,1,1),(0,0,2,2)}, это круговая дуга в плоскости yz. Используя перенос (Св.1.14, Раздел 1.4)Cw0(u)=2∑i=0Bi,2(u)Pwi,0 Cw1(u)=2∑i=0Bi,2(u)Pwi,1 где {Pwi,0}={(1,1,0,1),(1,1,1,1),(2,0,2,2)} и {Pwi,1}={(-1,1,0,1),(-1,1,1,1),(-2,0,2,2)} круговые дуги в плоскостях x=1 и x=-1, соответственно (рис 1.27). Линейная интерполяция между Cw0 и Cw1 дает цилиндрическую поверхность, т.е.Рисунок 1.27. Цилиндрическая поверхность как рациональная поверхность Безье. Sw(u,v)=2∑i=01∑j=0Bi,2(u)Bj,1(v)Pwi,j При фиксированном u=u0, Cwu0(u)=∑1j=0Bj,1(v)Qwj(u0) является отрезок прямой из Cw0(u0) в Cw1(u0) параллельно x-оси. Для фиксированного v=v0, Cwv0(u)=Sw(u,v0)=∑2i=0Bi,2(v)Qwi(v0) круговая дуга в плоскости x=(1-v0)(1)+v0(-1)=1-2v0. Теперь вычислим точку S(1⁄2,1⁄2), используя алгоритм A1.7. Обратите внимание, что n>m. Во-первых получить Cwv0=1⁄2(u)
S(12,12)=H{(0,34,1,54)}=(0,35,45) |
Упражнения
(1) | 90° вращение вокруг центра координат. Матрица поворота (применяется слева) является |
[0-110] | |
(2) | перенос по вектору (-1,-1) |
C(u)=n∑i=0Bi,n(u)Pi u∈[0,1]
Пусть v∈[a,b]. Тогда u=v-ab-a. Подставьте это уравнение в уравнение (1.8) и вывести это выражение для репараметризованной кривойC(v)=1(b-a)n∩∑i=0!i!(n-i)!(v-a)i(b-v)n-iPi
Интересно отметить, что контрольные точки не меняются, только базисные функции. Повторная параметризация степенной базисной формы изменяет геометрические коэффициенты, но не базисные функции.C(u)=(1-u21+u2,2u1=u2)
Определите, какие диапазоны параметров дают какие квадранты круга. Дают ли эти уравнения весь круг? Что вы можете сказать о параметризации?C(u)=(1+(√2-2)u+(1-√2)u21+(√2-2)u+(2-√2)u2,√22u((√2-2)u+2)1+(√2-2)u+(2-√2)u2)
Определить рациональное представление Безье, соответствующее этим уравнениям. Подсказка: Pi должен быть таким же, как и раньше - (1,0), (1,1), (0,1); Зачем? Вычислите веса wi, уравняв многочлены и подставив u=0,1⁄2,1, как было сделано ранее. Вычислите точку С(1⁄2), используя любой метод. Что интересного в С(1⁄2)?{Pi,0}={(0,0,0),(3,0,3),(6,0,3),(9,0,0)}
{Pi,1}={(0,2,2),(3,2,5),(6,2,5),(9,2,2)}
{Pi,2}={(0,4,0),(3,4,3),(6,4,3),(9,4,0)}
S(u,v)=n∑i=0m∑j=0Bi,n(u)Bj,m(v)Pi,j
и предположим, что P0,0=P1,0=⋯=Pn,0. Как это влияет на S(u,v), производные Su(u,v) и Sv(u,v) и Кривые Cv0(u)? Предположим, что Pi,0=(1,0,0) для i=0,1,2 в Примере1.15, с w0,0=1, w1,0=1,w2,0=2. Какой тип поверхность вы получаете?Sw(u,v)=[Bi,n(u)]T[Pwi,j][Bj,m(v)]=[ui]TMn[Pwi,j]MTm[vj]
где [ui]T и [vj] - векторы, Mn это (n+1)×(n+1) матрица, MTm это (m+1)×(m+1) матрица и [Pwi,j] это (n+1)×(m+1) матрица четырехмерных точек. Запишите эту форму явно для примера цилиндрической поверхности, пример 15. Используя эту матричную форму, вычислите точку Sw(1⁄2,1⁄2), а затем спроецировать для получения S(1⁄2,1⁄2). Для S(u,v) не существует прямой матричной формы, почему бы и нет?