алгоритм аппроксимации поверхностей на основе кубических

advertisement
АЛГОРИТМ АППРОКСИМАЦИИ ПОВЕРХНОСТЕЙ НА ОСНОВЕ
КУБИЧЕСКИХ СПЛАЙНОВ
Трепачко И.В.
В настоящее время автоматизация различных процессов находит широкое
применение. Научные лаборатории во всем мире ведут разработки по созданию
автоматических и полуавтоматических систем. И одним из направлений в
данном процессе является интерполяция и аппроксимация поверхностей.
Из современных подходов в данной области наиболее широкое
применение получил метод интерполяции поверхностей на основе кубических
сплайнов. Данный метод является высоко эффективным и показывает хорошие
результаты не только при интерполяции простых поверхностей, но и сложных
(где присутствуют многочисленные изломы и перепады).
Алгоритм интерполяции поверхностей на основе кубических сплайнов
интерполирует так называемые сеточные поверхности, т.е. заданные с помощью
некоторой регулярной сетки значений искомой поверхности в ее узлах. Таким
образом, в качестве входных данных алгоритм принимает регулярную сетку
значений, описывающую искомую поверхность. На выходе могут быть
получены значения искомой поверхности в любой точке, лежащей в диапазоне
входной регулярной сетки. Данный алгоритм состоит из двух этапов:
- инициализация необходимых коэффициентов по заданной сетке
значений поверхности в ее узлах;
- непосредственный поиск значения поверхности в заданной точке.
Причем инициализация коэффициентов для некоторой поверхности
проводится один раз, после чего можно многократно получать значения искомой
поверхности при заданных точках, лежащих в диапазоне заданной сетки
исходных значений искомой поверхности в ее узлах.
Первый этап является более сложным в вычислительном плане и требует
для сетки (n x m) узлов (n  1)  (m  1)  (n  1)  2n  m  3 раз решения задачи
одномерной интерполяции, с целью получения необходимых коэффициентов:
M i , j  g xx ( xi , y j )
(одномерный
случай
на
линиях
сетки
y  yj,
j  0, m ),
N i , j  g yy ( xi , y j )
(одномерный
случай
на
линиях
сетки
x  xi ,
i  0, n ),
K i , j  g xxyy ( xi , y i ) (одномерный случай на линиях сетки x  xi , i  0, n , где в качестве
значения функции в узлах сетки используются значения M i , j  g xx ( xi , y j ) ).
Коэффициенты N i , j , M i , j , K i , j определяются соотношениями типа (2). Для поиска
значения искомой функции g ( x, y ) в некоторой точке ( x, y ) , необходимо знать
значения самой функции g ( xi1 , y) , g ( xi , y ) (определяются с помощью N i , j ) и
значения вторых производных g xx ( xi 1 , y) , g xx ( xi , y) (определяются с помощью
M i , j , K i , j ) см. рис. 1. Тогда задача поиска g ( x, y ) является одномерной на линии х
и определяется соотношением типа (1). Задача одномерной интерполяции с
помощью кубических сплайнов решается с помощью соотношений (1), (2).
g ( x)  mi 1 
( xi  x ) 3
( x  xi 1 ) 3
h2 x  x
h 2 x  xi 1
 mi 
 ( f i 1  mi 1  i )  i
 ( f i  mi  i ) 
6  hi
6  hi
6
hi
6
hi
(1)
где hi  xi  xi 1 , i  0, n , а величины mi представляют собой значения вторых
производных функции g (x ) в узловых точках сетки.
Am  d ,
где
i  1, n  1 ,
m0  mn  0 ,
 h1  h2
 3
 h
 2
 6
A
 0
 ...

 0

h2
6
h2  h3
3
h3
6
...
0
(2)
0
...
h3
...
6
h3  h4
...
3
...
...
0
0
0
0
...
hn1
0
6



0 

,
0 
... 
hn1  hn 

3 
0
 m1 


 m2 
m   m3  ,


 ... 
m 
 n 1 
f
1 1
 f0

 f1  (  )  2 

h1 h2
h2 
 h1
f3 
 f1
1
1
 h  f2  (h  h )  h

2
2
3
3


d  f2
f4  .
1
1
 f3  (  ) 
 h3
h3 h4
h4 


...
f
fn 
1
1
 n  2  f n 1  (


)

h

h
h
h
n 1
n
n 
 n 1
Зная коэффициенты N i , j , M i , j , K i , j , можно определить коэффициенты ani,,mj
полинома g ( x, y ) для каждой ячейки исходной сетки (16 значений) и не
прибегать к вычислениям g ( x, y ) , g ( xi1 , y) , g ( xi , y ) , g xx ( xi 1 , y) , g xx ( xi , y) по
соотношениям
типа (1) каждый раз при вычислении значения поверхности в
некоторой точке ( x, y ) , что соответственно сократит вычисления при реализации
второго этапа.
Y
d  ym
g (x, y)
y m 1
yj
f ( xi , y j )
y
Mi, j  gxx(xi , yj )
Ni, j  gyy(xi , y j )
Ki , j  gxxyy ( xi , y j )
y j 1
g ( xi , y )
g xx ( xi , y )
y1
c y0
g ( xi 1 , y )
g xx ( xi 1 , y)
 j  y j  y j1
0
xi 1x xi
a  x0 x 1
hi  xi  xi 1
xn1 xn  b
X
Рис. 1
Второй этап состоит в определении значения g ( x, y ) в некоторой точке
( x, y ) с помощью соотношения (3).
g ( x, y)  g i , j ( x, y) 
3
a
n , m 0
i, j
n,m
 ( x  xi 1 ) n  ( y  y j 1 ) m ,
(3)
где i, j – определяют ячейку сетки, а коэффициенты полинома ani,,mj должны быть
вычислены для каждой ячейки сетки на первом этапе. Всего необходимо хранить
16 значений для каждой ячейки.
Недостатком описанного алгоритма является неотъемлемое условие
наличия регулярной сетки, определяемой искомую поверхность, что на практике
может требовать применение дополнительных интерполяционных методов
(например, RBF-интерполяция), для получения таковой, т.к. в реальных
условиях исходные значения искомой поверхности обычно представляют
некоторую выборку хаотично разбросанных точек в пространстве.
Download