Капелюхин И.А. студент, ИНЖЭКОН Сергеев А.Н. доцент кафедры ВМ, ИНЖЭКОН

advertisement
Капелюхин И.А.
студент, ИНЖЭКОН
Сергеев А.Н.
доцент кафедры ВМ, ИНЖЭКОН
СХЕМА АЛГОРИТМА SUBDIVISION ДЛЯ
ПОЛИНОМИАЛЬНОГО СПЛАЙНА
В компьютерной графике для построения кривых и поверхностей
широко используется математический аппарат полиномиальных
сплайнов. При восстановлении (изображении) сплайна на
мониторе можно строить ломаную, соединяющую точки сплайна
вычисленные с некоторым шагом на сетке параметра. Этот
способ связан с выбором шага. В статье рассматривается способ
и приводится схема восстановления сплайна с помощью
алгоритма
subdivision
многоугольника.
(дробления)
Характеристический
характеристического
многоугольник
представляет собой ломаную, число звеньев которой при каждой
прогонке алгоритма subdivision увеличивается вдвое и в пределе
равномерно сходится к восстанавливаемой кривой. Такой способ
восстановления кривой требует выбора лишь числа итераций
subdivision и, очевидно, предпочтительнее в компьютерной
графике.
1. Полярной формой [1] полинома
1
P( x)  a0 x 3  3a1 x 2  3a2 x  a3
(1)
называется выражение
p(t1 , t 2 , t3 ) 
 a0t1t 2t3  a1t1t 2  a1t 2t3  a1t1t3  a2t1  a2t 2  a2t3  a3 .
(2)
Значение полярной формы полинома при конкретных значениях
t1 , t 2 , t3 называется полюсом полинома. Ясно, что p( x, x, x)  P( x) .
Непосредственно проверяется справедливость равенства
pti 1 , ti  2 , x  
pti , ti 1 , ti  2 ti  3  x   pti 1 , ti  2 , ti  3  x  ti 
.
ti  3  t i
(3)
Вычисления по формуле (3) называются процедурой включения
узла и изображаются следующей схемой
p t i , t i 1 , t i  2 
p t i 1 , t i  2 , x 
p (t i 1 , t i  2 , t i  3 )
C учётом процедуры включения узла, схема вычисления значения
полинома в точке x имеет вид
p t1 , t 2 , t3 
p t 2 , t3 , t 4 
p t3 , t 4 , t5 
p t 4 , t5 , t6 
p t 2 , t3 , x 
p t3 , x, x 
p t3 , x, t 4 
p  x, x, t 3 
p  x, t 4 , t5 
2
p  x, x, x 
Лемма (основная лемма теории полярных форм) Для того, чтобы
в точке x0 полиномы P(x) и Q(x) степени n имели порядок
ds
ds
P( x0 )  s Q( x0 ), s  1 : r необходимо
касания r , то есть,
dx s
dx
и достаточно чтобы x1, x2 ,, xr выполнялись равенства,
p( x0 , , x0 , x1 , x2 , , xr )  q( x0 , , x0 , x1 , x2 , , xr ) .
(4)
Доказательство этой леммы можно найти в [2].
2. Полиномиальным вектор-сплайном степени 3 называется
функция S : R 2  R 2 вида
3
S (t )  
C3k ak t k
k 0
m
  b j (t   j ) 3 ,
j 1
(5)
где
(t
  j )3
3

 (t   j ) , если t   j  0

если t   j  0 .

0,
Здесь t  текущая точка на сетке параметра;  j , j 1 : m узел
сплайна – фиксированная точка на сетке параметра ; ak , bk  R 2 ,
k  1,2,3 ; Ck3  биномиальный коэффициент. Легко заметить, что
функция S ( x)  C2 (R 2 ) , причём для всех x   j , j  1 : m эта
функция бесконечно дифференцируема.
Полярной формой сплайна называется выражение
3
3
m
k 0
j 1
s(t1 , t2 , t3 )   ak k (t1 , t2 , t3 )   b j (t1   j ) (t2   j )  (t3   j )  (5)
Значение полярной формы при конкретных значениях t1 , t 2 , t3 ,
таких, что  j  ti , ti 1  , j  1 : m ; i  1,2 называется полюсом
сплайна.
3
Обозначим P0 (t )   C3k ak t k ,
k 0
3
P (t )  
C3k ak t k
k 0

  b j (t   j ) 3   1 : m .
j 1
Положим  0   ,  m 1   . Заметим, что полиномы Pi 1 ( x ) и
Pi (x ) в узле  i , i  1 : m имеют касание второго порядка.
Теорема. Полюс сплайна
3
m
k 0
j 1
s(t1 , t2 , t3 )   ak k (t1 , t2 , t3 )   b j (t1   j ) (t2   j )  (t3   j )  (6)
является полюсом полиномов P  , P  1 ,  , P  , где




   max j |  j  t1 ,    min j |  j  t3  1 , j  0 : m  1. (7)
Доказательство. Не умаляя общности
(Рис.1) ,
рассмотрим
узлы 1 ,  2 ,  3 и полиномы
3
P0 (t )  
C3k ak t k ,
k 0
3
P1 (t )   C3k ak t k  b1 (t  1 ) 3 ,
k 0
(8)
3
P2 (t )   C3k ak t k  b1 (t  1 ) 3  b2 (t   2 ) 3 ,
k 0
4
(9)
3
P3 (t )   C3k ak t k  b1 (t  1 )3  b2 (t   2 )3  b3 (t  3 )3 . (10)
k 0
Рис. 1
Возможны четыре случая.
1) Среди точек t1 , t 2 , t3 нет ни одного узла сплайна (Рис.2)
Рис. 2
В этом случае    1 ,    1 и
3
s(t1 , t2 , t3 )   ak k (t1 , t2 , t3 )  b1 (t1  1 )(t2  1 )  (t3  1 ) . (11)
k 0
Это полюс полинома P1 .
2) Среди точек t1 , t 2 , t3 один узел сплайна. Рассмотрим, вначале,
случай t1  1 (Рис. 3). При этом    0 ,    1 и
3
s(t1, t2 , t3 )   ak k (t1, t2 , t3 )
k 0
5
(12)
Рис. 3
Очевидно, s (t1 , t 2 , t3 )  p0 (t1 , t 2 , t3 )  полюс полинома P0 . В точке
1 полиномы P0 и P1 имеют касание второго порядка. Значит по
основной лемме p0 (1 , t , t )  p1 (1 , t , t ) для любых t , t  . В
частности, при t   t1 , t   t2 . Отсюда, с учётом t1  1 имеем
s(t1 , t2 , t3 )  p0 (t1 , t 2 , t3 )  p1 (t1 , t2 , t3 ) .
(13)
При t3   2 (Рис.4),    1 ,    2 и
3
s(t1 , t2 , t3 )   ak k (t1 , t2 , t3 )  b1 (t1  1 )(t2  1 )  (t3  1 ) . (14)
k 0
Рис.4
Очевидно, s (t1 , t 2 , t3 )  p1 (t1 , t 2 , t3 )  полюс полинома P1 . В точке
 2 полиномы P1 и P2 имеют касание второго порядка. Значит по
6
основной лемме p1 (t , t ,  2 )  p2 (t , t ,  2 ) для любых t , t  . В
частности, при t   t1 , t   t2 . Отсюда, с учётом t3   3 имеем
s(t1 , t2 , t3 )  p1 (t1 , t2 , t3 )  p2 (t1 , t 2 , t3 ) .
(15)
3) Среди точек t1 , t 2 , t3 два узла сплайна. Рассмотрим, вначале,
случай t2   2 , t3   3 (Рис. 5). При этом,    1 ,    3 и
3
s(t1 , t2 , t3 )   ak k (t1 , t2 , t3 )  b1 (t1  1 )  (t2  1 )  (t3  1 ) . (16)
k 0
Рис. 5
Очевидно, s (t1 , t 2 , t3 )  p1 (t1 , t 2 , t3 )  полюс полинома P1 . В точке
 2 полиномы P1 и P2 имеют касание второго порядка. Значит по
основной лемме p1 (t ,  2 , t )  p2 (t ,  2 , t ) для любых t , t  . В
частности, при t   t1 , t   t3 . Отсюда, с учётом t2   2 имеем
s(t1 , t2 , t3 )  p1 (t1 , t2 , t3 )  p2 (t1 , t 2 , t3 ) .
(17)
В точке  3 полиномы P2 и P3 имеют касание второго порядка.
Значит по основной лемме p2 (t , t , 3 )  p3 (t , t , 3 ) для любых
7
t , t  . В частности, при t   t1 , t   t2 . Отсюда, с учётом t3   3
имеем
p2 (t1 , t 2 , t3 )  p3 (t1 , t 2 , t3 ) .
(18)
Объединяя (17) и (18) получаем требуемое
s (t1 , t 2 , t3 )  p1 (t1 , t 2 , t3 )  p2 (t1 , t 2 , t3 )  p3 (t1 , t 2 , t3 ) .
(19)
В случае t1  1 , t2   2 ,    0 ,    2 (Рис. 6) равенство
s (t1 , t 2 , t3 )  p0 (t1 , t 2 , t3 )  p1 (t1 , t 2 , t3 )  p2 (t1 , t2 , t3 )
(20)
доказывается аналогично
Рис.6
4) Точки t1 , t 2 , t3
- это узлы сплайна 1 ,  2 ,  3 (Рис.7). В этом
случае    0 ,    3 и
3
s(t1 , t2 , t3 )   ak k (t1 , t 2 , t3 ) .
k 0
8
(21)
Рис. 7
Видно, что s (t1 , t 2 , t3 )  p0 (t1 , t 2 , t3 )  полюс полинома P0 . В точке
1 полиномы P0 и P1 имеют касание второго порядка. Значит по
основной лемме p0 (1 , t , t )  p1 (1 , t , t ) для любых t , t  . В
частности, при t   t1 , t   t2 . Отсюда, с учётом t1  1 имеем
s(t1 , t2 , t3 )  p0 (t1 , t 2 , t3 )  p1 (t1 , t2 , t3 ) .
(22)
В точке  2 полиномы P1 и P2 имеют касание второго порядка.
Значит по основной лемме p1 (t ,  2 , t )  p2 (t ,  2 , t ) для любых
t , t  . В частности, при t   t1 , t   t3 . Отсюда, с учётом t2   2
имеем
p1 (t1 , t2 , t3 )  p2 (t1 , t2 , t3 ) .
(23)
В точке  3 полиномы P2 и P3 имеют касание второго порядка.
Значит по основной лемме p2 (t , t , 3 )  p3 (t , t , 3 ) для любых
t , t  . В частности, при t   t1 , t   t2 . Отсюда, с учётом t3   3
имеем
9
p2 (t1 , t 2 , t3 )  p3 (t1 , t 2 , t3 ) .
(24)
Объединяя (22) - (24) получаем требуемое
s(t1 , t2 , t3 )  p0 (t1 , t2 , t3 )  p1 (t1 , t 2 , t3 )  p2 (t1 , t2 , t3 )  p3 (t1 , t2 , t3 ) . (25)
Теорема доказана.
Следствие 1. По полюсам сплайна s(t1, t2 , t3 ) , s (t 2 , t3 , t 4 ) с
помощью алгоритма включения узла
t1    t4 вычисляется
полюс сплайна s (t 2 , t3 ,  ) .
Прогрессивной последовательностью
полюсов называется
множество полюсов вида s (ti , ti 1 , ti  2 ), i  1,2,
Следствие 2. Прогрессивная последовательность узлов сплайна
s(ti , ti 1, ti  2 ),
i  1,2,, s , позволяет восстановить сплайн в
любой точке   ti  2 , t s .
На основании следствия 2 видно, для вычисления значения
сплайна
t  1 ,  m 
достаточной
является
прогрессивная
последовательность полюсов
s(i , i 1, i  2 ) ,
i  1,0,1,2,, m, m  1, m  2
10
(26)
Здесь полюсы s ( 1 ,  0 , 1 ) , s ( 0 , 1 ,  2 ) – это произвольные
полюсы
полинома
s( m ,  m 1,  m  2 )
P1
и,
аналогично,
s( m 1,  m ,  m 1 ) ,
– это произвольные полюсы полинома Pm 1 .
Последовательность
прогрессивных
полюсов
(26)
является
минимальной достаточной для вычисления значения сплайна
t  1 ,  m .
Ломаная, последовательно соединяющая полюсы
(26), называется характеристическим многоугольником сплайна.
Характеристический
повторяет
многоугольник
(аппроксимирует)
ломаной, соединяющей
форму
некоторым
сплайна.
образом
Построение
последовательность прогрессивных
полюсов
s(ti , ti 1, ti  2 ),
i  1,2,, n , n  m  4
(27)
называется алгоритмом subdivision. Эта ломаная также является
характеристическим многоугольником сплайна, но на более
частой сетке и, значит, лучше повторяет его форму. В теории
сплайнов доказывается, что при n   имеется равномерная
сходимость.
Предлагаемая схема алгоритма subdivision заключается в том, что
при одной прогонке вдоль сетки параметра в середину каждого
отрезка [ti , ti 1 ] включается новый узел (Рис.8). Для удобства, в
дальнейшем при обозначении полюсов сплайна будем записывать
11
вместо аргументов с индексами только индексы, например,
s (t1 , t 2 , t3 )  s (1,2,3) , или s (t1 , t a1 , t3 )  s (1, a1,3) .
Рис. 8
Приведём ниже вычисления прогонки алгоритма subdivision
вдоль сетки параметра t1 , t 2 , t3 , t 4 , t5 , при которой вычисляются
вершины характеристического многоугольника на сетке с
включёнными узлами t a1 , t a 2 , t a 3 , t a 4 (Рис.8).
s (1, a1,2) 
1
1
s (0,1,2)  s (1,2,3)
2
2
1
5
s (1,2, a 2)  s (0,1,2)  s (1,2,3)
6
6
s (a1,2, a 2) 
s (2, a 2,3) 
3
1
s (1,2, a 2)  s (2, a 2,3)
4
4
1
1
s (1,2,3)  s (2,3,4)
2
2
1
5
s (2,3, a3)  s (1,2,3)  s (2,3,4)
6
6
s (a 2,3, a3) 
s (3, a3,4) 
3
1
s (2,3, a3)  s (3, a3,4)
4
4
1
1
s (2,3,4)  s (3,4,5)
2
2
12
1
5
s (3,4, a 4)  s (2,3,4)  s (3,4,5)
6
6
s (a3,4, a 4) 
s (4, a 4,5) 
«Сдвинуты»
вершинами
3
1
s (3,4, a 4)  s (4, a 4,5)
4
4
1
1
s (3,4,5)  s (4,5,6) .
2
2
вычисления
полюсов,
характеристического
которые
не
являются
многоугольника,
но
используются при вычислениях. Видно, что предлагаемая схема
«экономная», то есть среди трёх вычислений только одно
оказывается промежуточным.
Рис. 9а
Рис. 9б
13
На рисунке 9а изображены характеристические многоугольники
четырёх
замкнутых
характеристический
кривых.
На
рисунке
многоугольник,
9б
получаемый
изображен
при
двух
прогонках алгоритма.
Рис. 10а
Рис. 10б
Предложенную схему алгоритма subdivision можно естественно
применить при построении поверхностей заданных сплайновым
каркасом. На рисунке 10а изображён
характеристический
многогранник поверхности, а на рисунке 10б характеристический
многогранник, полученный после четырёх прогонок алгоритма
subdivision
вдоль
характеристических
многоугольников,
составляющих каркас.
ЛИТЕРАТУРА
1. G. Farin, Curves and Surfaces for CAGD. Fourth edition,
Academic press, San Diego, California, 1997.
14
2. Малоземов В.Н., Сергеев А.Н. “Аналитические основы теории
полярных форм”//Алгебра и анализ, том 10 (1998), вып. 6.
15
Download