Кривые Безье

advertisement
Федеральное агентство по образованию
ГОУ ВПО «Санкт-Петербургский государственный
инженерно-экономический университет»
Раздел конкурса – инженерно-экономические науки
«Параметризация и визуализация усечённых поверхностей Безье для
электронной коммерции»
Выполнил:
Научный руководитель:
Капелюхин Иван Александрович,
Сергеев Александр Николаевич
факультет ИСвЭУ,
доц. каф. высшей математики, к.ф-м.н
группа 353,
3 курс
Санкт-Петербург, 2007
Содержание
Введение ................................................................................................................... 2
Кривые Безье............................................................................................................ 3
Поверхности Безье .................................................................................................. 7
Усечённые поверхности Безье ............................................................................. 10
Литература ............................................................................................................. 18
Приложение А: Процедура вычисления координат точек на языке Pascal
(Delphi) ................................................................................................................... 19
Приложение Б: Процедура построения поверхности на языке MATLAB ...... 20
Приложение В: Код вычисления точек для различных параметризаций........ 21
Приложение №1: Аннотация научной работы ................................................... 24
Приложение №2: Сведения о студенте и его научном руководителе ............. 25
Приложение №3: Сведения о научной работе ................................................... 26
Приложение №4: Отзыв научного руководителя о самостоятельности
выполненной работы............................................................................................. 27
1
Введение
Цель работы - разработка теоретических основ и оптимизация
существующих алгоритмов
визуализации трехмерных моделей для
представления товаро-материальных ценностей, реализуемых электронным
способом
Основные
результаты
научного
исследования:
разработан
программный код для интерактивного моделирования порций поверхностей
Безье
на
треугольной
и
прямоугольной
Рассмотрены различные параметризации
параметрических
сетках.
порции поверхности Безье на
треугольнике, которые позволят выполнять сшивки порций на топологически
произвольных сетках.
Программная реализация основывается на рекурсивном алгоритме
вычисления точек путём последовательных линейных интерполяций.
В качестве моделей поверхностей были взяты поверхности Безье. Это
широко применяемый математический аппарат для задач геомерического
моделирования в разных областях, например [3]. Кривые Безье были
независимо разработаны в 60-х года XX века Пьером Безье, инженером
автомобильной компании «Рено», и Полем де Кастельжо, инженером
компании «Ситроен». Впервые кривые были представлены широкой публике
в 1962 году французским инженером Пьером Безье, который, разработав их
независимо
от
де
Кастельжо,
использовал
их
для
компьютерного
проектирования автомобильных кузовов. Кривые были названы именем
Безье, а именем де Кастельжо назван разработанный им рекурсивный способ
определения кривых (алгоритм де Кастельжо). Впоследствии это открытие
стало одним из важнейших инструментов систем автоматизированного
проектирования и программ компьютерной графики.
2
Кривые Безье
Кривая Безье – параметрическая кривая, задаваемая выражением
n
B(t )   pi bi ,n (t ), 0  t  1 ,
(1)
i 0
где
pi , i  1 : n -
опорные вершины в пространстве кривой, называемые
полюсами, а bi ,n (t ) - базисные полиномы Бернштейна:
n
bi ,n (t )   t i (1  t ) ni , i 1: n .
i
Отрезки,
соединяющие
полюсы,
называются
(2)
характеристическим
многоугольником.
В связи с тем, что в уравнение кривой входит вычисление факториалов,
вычисление точек кривой таким образом является нерациональным.
Существуют более быстрые рекурсивные алгоритмы.
Алгоритм построения кривой Безье следующий: на каждом шаге
параметр
t
принимает
значение
на
отрезке
[0,1].
Стороны
характеристического многоугольника разбиваются точкой в отношении t.
Затем полученные точки соединяются отрезками, каждый из которых также
разбивается точкой в отношении t, и так до тех пор, пока не получим
единственную точку, которая принадлежит кривой Безье.
Например, рассмотрим построение точки кривой второго порядка,
заданной характеристическим многоугольником p 0 , p1 , p 2 (рис. 1). Возьмём
некоторое произвольное значение
t
из промежутка [0,1]. Стороны
разбиваются в отношении t, в результате чего получаются точки a1 , a 2 , a3 .
Отрезки a1a 2 , a 2 a3 также делятся в отношении t, получаются точки b1 , b2 .
Отрезок b1b2 делится в отношении t, получается точка c1 , которая лежит на
искомой кривой.
3
Рис. 1: Построение кривой Безье
Кривые Безье обладают свойством subdivision, которое заключается в
следующем: на каждом шаге отрезки делятся в отношении t, в результате
чего
получим
точку,
которая
делит
исходный
характеристический
многоугольник на два характеристических многоугольника и лежит на
кривой (рис. 2). При этом каждый из полученных характеристических
многоугольников (ABCD и DEFH на рис. 2) является характеристическим
многоугольником части кривой. Эта процедура, таким образом, разбивает
кривую на две части, построение каждой из которых можно выполнять по
отдельности. Это позволяет при интерактивном моделировании учитывать
форму кривой и распараллеливать вычисления.
4
Рис. 2: Первый шаг subdivision
Затем с каждым из полученных многоугольников проделываются те же
операции до тех пор, пока не будет получено нужное количество точек.
Рис. 3: Второй шаг алгоритма subdivision
5
Рис. 4: Полученная кривая
6
Поверхности Безье
Поверхности Безье являются обобщением кривых Безье на случай
трёхмерного пространства.
Известны две различных параметризации поверхности Безье. Первая –
это тензорное произведение кривых. Поверхность тензорного произведения
имеет вид
n
m
P(u, v)   pi , j bi ,n (u )b j ,m (v), 0  u  1, 0  v  1 ,
(3)
i 0 j 0
где pi , j , i  1 : n, j  1 : m - опорные вершины в пространстве поверхности.
Обобщением кривой является поверхность Безье в барицентрических
координатах вида
T (u, v, w) 
n i j
n i  j
r
, u  v 1.

ij 
 ij  u v (1  u  v)
i  j n
 
(4)
Алгоритм построения поверхности Безье: строятся кривые Безье в
u-направлении, полученные точки рассматриваются как полюсы для
построения кривых Безье в v-направлении, точки которых принадлежат
поверхности Безье. На рисунках 5, 6, 7, 8 изображены последовательные
шаги subdivision в u-направлении (уплотнение сетки по u). На рисунках 9,
10,
11
изображены
последовательные
шаги
в
v-направлении.
7
Построение поверхности с использованием свойства subdivision:
Рис. 5: Исходные вершины
Рис. 6: 1 шаг subdivision в
u-направлении
Рис. 7: 2 шаг subdivision в
Рис. 8: 3 шаг subdivision в
u-направлении
u-направлении
Рис. 9: 1 шаг subdivision в
Рис. 10: 2 шаг subdivision в
v-направлении
v-направлении
8
Рис. 11: 3 шаг subdivision в u-направлении, искомая поверхность
9
Усечённые поверхности Безье
C помощью замены параметра, поверхность Безье может быть
представлена в виде (3) следующим образом
n n i
P(u, s)   ri , j pn,i (u ) pni , j ( s), 0  u, s  1
i 0 j 0
 n
Обозначим pn,k ( x)   (1  x) nk x k  базисные полиномы Бернштейна
k 
степени n. Поверхность
n n i
P(u, s)   ri , j pn,i (u ) pni , j ( s), 0  u, s  1, ri,j  R 3 , i  0 : n, j  0 : n  i ,
(5)
i 0 j 0
называется усечённой поверхностью Бернштейна.
Вместе с поверхностью (5) рассмотрим поверхности
n n j
Pˆ (v, t )   ri , j pn , j (v) pn j ,i (t ), 0  v , t  1
(6)
j 0 i 0
и
n k

P( w, q)   rk  j , j pn,nk ( w) pk , j (q), 0  w , q  1
(7)
k 0 j 0
Утверждение 1: При u  1 любом 0  s  1 равенство (5) определяет
единственную точку.
Доказательство:
n n i
n
n i
i 0 j 0
i 0
j 0
P(1, s)   ri , j pn,i (1) pni , j ( s)   pn,i (1) ri , j pni , j ( s)  pn,n (1)rn, 0  rn, 0 .
Утверждение доказано.
10
Утверждение 2: При v  1 и любом 0  t  1 равенство (6) определяет
единственную точку.
Доказательство:
n n j
n
n j
j 0 i 0
j 0
i 0
Pˆ (1, t )   ri , j pn , j (1) pn j ,i (t )   pn , j (1) ri , j pn j ,i (t )  pn ,n (1)r0,n  r0,n
Утверждение 3: При w  1 и любом 0  q  1 равенство (7) определяет
единственную точку.
Доказательство:
n k
n
k

P(1, q)   rk  j , j pn,nk (1) pk , j (q)   pn,nk (1) rk  j , j pk , j (q)  pn,n (1)r0, 0  r0, 0
k 0 j 0
k 0
j 0
Рассмотрим замены переменных
u  (1  v)t , v  (1  u ) s .
(8)
w  (1  u )(1  s) , (1  w)q  u .
(9)
Утверждение 4: Замена переменных (8) и (9) определяет взаимно
однозначное соответствие между точками поверхностей (5) , (6) и (7).
Доказательство: Рассмотрим замену (8) . При u  0, s  1 переменная
v  1, а переменная t определена неоднозначно. Но, согласно Утв. 2, при
v  1 определена единственная точка поверхности (6). При остальных
значениях u, s переменные v, t определяются взаимно однозначно.
11
Аналогично, при v  0, t  1 переменная u  1 , а переменная s
определена неоднозначно. Но, согласно Утв. 1, при u  1 определена
единственная точка поверхности (5).
При остальных значениях v, t переменные u, s определяются взаимно
однозначно.
Рассмотрим замену (9). При u  1, s  1 переменная w  1 , а переменная
t определена неоднозначно. Но, согласно Утв. 3, при w  1 определена
единственная точка поверхности (7). При остальных значениях
u, s переменные w, q определяются взаимно однозначно.
Аналогично, при w  0, q  1 переменная u  1 , а переменная s
определена неоднозначно. Но, согласно Утв. 1, при u  1 определена
единственная точка поверхности (5).
При остальных значениях w, q переменные u, s определяются взаимно
однозначно.
Утверждение доказано.
Покажем, что при замене (8) справедливо
(1  u)(1  s)  (1  v)(1  t ) .
(10)
Действительно,
(1  u)(1  s)  (1  u  s  us)  (1  t  vt  s  s  v)  (1  v)(1  t ) .
Покажем, что при замене (9) справедливо
(1  w)(1  q)  s(1  u) .
(11)
12
Действительно,
(1  w)(1  q)  (1  w  q  wq)  (1  1  u  s  us  u  wq  wq)  s(1  u) .
Утверждение 5: При замене переменных (8) справедливо равенство
n i
n n j
i 0 j 0
j 0 i 0
n
P(u, s )   ri , j p n ,i (u ) p n i , j ( s )  Pˆ (v, t )   ri , j p n , j (v) p n i , j (t ) .
Доказательство:
Сравним коэффициенты при векторах ri , j , i  j  n . Зафиксируем
i, j
i  j  n . Имеем
pn,i (u) pni , j ( s) 
n!
(n  i)!
(1  u ) ni u i
(1  s) ni  j s j 
i!(n  i)!
j!(n  i  j )!
n!
(n  i )!
(1  u ) n i  j u i (1  u ) j
(1  s ) n i  j s j 
i!(n  i )!
j!(n  i  j )!
n!
(1  u )(1  s) ni  j u i (n  i)! s(1  u )  j 

i!(n  i )!
j!(n  i  j )!
n!
(n  j )!
i

(1  v) n i  j (1  t ) n i  j (1  v)t 
vj 
j!(n  j )!
i!(n  i  j )!
n!
(n  j )!
i

(1  v) n  j v j
(1  t ) n i  j t   p n , j (v) p n i , j (t )
j!(n  j )!
i!(n  j  i )!

Утверждение доказано.
Утверждение 6: При замене переменных (9) справедливо равенство
n n i
n k

P(u, s)   ri , j pn,i (u) pn i , j (s)  P(w, q)   rk  j , j pn, n  k (w) pk , j (q)
i 0 j 0
k 0 j 0
13
Доказательство:
Сравним коэффициенты при векторах ri , j , i  j  n . Зафиксируем
i  j  n . Имеем
i, j
pn,i (u) pni , j ( s) 
n!
(n  i)!
(1  u ) ni u i
(1  s) ni  j s j 
i!(n  i)!
j!(n  i  j )!
(n  i )!
n!
(1  u ) n i  j u i (1  u ) j
(1  s ) n i  j s j 
i! (n  i )!
j! (n  i  j )!
n!
(1  u )(1  s) n i  j u i (n  i)! s(1  u )  j 

i! (n  i )!
j! (n  i  j )!
n!
i (i  j )!
(1  w)(1  q)  j 

w n i  j q (1  w) 
(n  i  j )! (i  j )!
i! j!
(i  j )!
n!

(1  w) i  j w n i  j
(1  q ) i q j 
(n  i  j )! (i  j )!
i! j!
 p n , n i  j ( w) p i  j , j (q )  p n , n  k ( w) p k , j (q )

Утверждение доказано.
С учётом Утверждения 4 из Утверждений 5 и 6 следует
Теорема. Поверхности (5) , (6) и (7) состоят из одного и того же
множества точек.
Из равенств u  (1  v)t , v  (1  u ) s , w  (1  u )(1  s) следует, что
u  v  w  1. Кроме того, с учётом (8) ,(9), (10) и (11) имеем
n
n i
P(u, s)   ri , j pn ,i (u ) pni , j ( s ) 
i 0 j 0
n
n i
 r
i 0 j 0
n
i, j
n i
 r
i 0 j 0
i, j
n!
(n  i )!
(1  u ) ni u i
(1  s ) ni  j s j 
(n  i )!i!
j!(n  i  j )!
n!
n!
j
n i  j
u i s(1  u )  (1  u )(1  s ) 
  ri , j
u i v j w n i  j .
i! j!(n  i  j )!
i! j!(n  i  j )!
i  j n
14
Таким образом, поверхности (5), (6) и (7) могут быть представлены в виде
поверхности Безье на треугольнике.
Рис. 12: Поверхность Безье на треугольнике
15
Рис. 13: Параметризация (5)
Рис. 14: Параметризация (6)
16
Рис. 15: Параметризация (7)
17
Литература
[1] Shi-Min Hu “Conversion between triangular and rectangular Bezier patches”,
CAGD Vol. 18 Issue 7 (2001)
[2] М.И.Григорьев, В.Н.Малозёмов, А.Н.Сергеев “Полиномы Бернштейна и
составные кривые Безье” //Журн. вычисл. мат. и матем. физ. 2006, Т.46, №11,
с. 1962-1971
[3] Математика и САПР: В 2-х кн. Кн. 2. Пер. с франц./Жермен-Лакур П.,
Жорж П. Л., Пистр Ф., Безбе П. – М.: Мир, 1989. – 264 с., ил.
[4] Сайт семинара по геометрическому моделированию и дискретному
гармоническому анализу http://dha.spb.ru
[5] Фокс А., Пратт М. Вычислительная геометрия. Применение в
проектировании и на производстве. Пер. с англ. М.: Мир, 1982. 304 с. ил.
18
Приложение А: Процедура вычисления координат точек
на языке Pascal (Delphi)
var i,j,k,len,n,p,temp, offset, offset2, step: integer;
p1,p2:TPoint; points: array of TPoint; depth: integer;
arr: array of TPoint;
begin
// длина конечного массива:
len:=round(power(2,depth)*length(points)-power(2,depth)+1);
n:=length(points)-1; // степень кривой
setlength(arr, len);
p:=0;
for i:=0 to length(points)-1 do begin // шаги
arr[p]:=points[i];
p:=p+round(power(2,depth));
end;
for j:=depth downto 1 do begin
k:=round(power(2, j-1)); temp:=1; step:=k;
while (k<length(arr)) do begin
offset2:=k;
for i:=1 to n do begin
offset:=offset2;
while (offset<=round(power(2,j)*n)*temp-step*i) do begin
arr[offset].x:=round((arr[offset-step].x+arr[offset+step].x)/2);
arr[offset].y:=round((arr[offset-step].y+arr[offset+step].y)/2);
offset:=offset+step*2;
end;
offset2:=offset2+step; // смещение на разных подшагах
end;
k:=k+round(power(2,j)*n); temp:=temp+1;
end;
end;
19
Приложение Б: Процедура построения поверхности на
языке MATLAB
function arr=subdivision(px, py, pz, depth)
len=round(power(2,depth)*length(px)-power(2,depth)+1); % длина конечного
массива
n=length(px)-1; % степень кривой
arr=zeros(1,len, 2);
p=1;
for i=1:length(px)
arr(1,p,1)=px(i);
arr(1,p,2)=py(i);
arr(1,p,3)=pz(i);
p=p+round(power(2,depth));
end
for j=depth:-1:1 % шаги
k=round(power(2, j-1)); temp=1; step=k;
while (k<length(arr))
offset2=k;
for i=1:n % подшаги
offset=offset2; % смещения на данном подшаге subdivision
while (offset<=round(power(2,j)*n)*temp-step*i)
arr(1,offset+1,1)=(arr(1,offset-step+1,1)+arr(1,offset+step+1, 1))/2;
arr(1,offset+1,2)=(arr(1,offset-step+1,2)+arr(1,offset+step+1, 2))/2;
arr(1,offset+1,3)=(arr(1,offset-step+1,3)+arr(1,offset+step+1, 3))/2;
offset=offset+step*2;
end;
offset2=offset2+step; % смещение на разных подшагах
end;
k=k+round(power(2,j)*n); temp=temp+1;
end;
end;
function f = bez_sub(depth)
% Массивы координат полюсов:
px=[0,1,2,3; 0.5,1.5,2.5,3.5; 0,1,2,3; 0.5,1.5,2.5,3.5];
py=[0,0.5,0.5,0; 1,1.25,1.25,1; 2,1.75,1.75,2; 3,2.5,2.5,3];
pz=[0.75,0.5,0.5,0.75; 0.5,1,1,0.5; 0.5,1,1,0.5; 0.75,0.5,0.5,0.75];
n=length(px(1,:));
size1=(2^depth)*n-(2^depth)+1;
temp=zeros(n,size1,3);
for i=1:n
res=subdivision(px(i,:),py(i,:),pz(i,:),depth);
temp(i,:,:)=res(1,:,:);
end
size2=(2^depth)*n-(2^depth)+1;
size2
size1
size(temp)
temp2=zeros(size2,size1,3);
for i=1:size1
res2=subdivision(temp(:,i,1),temp(:,i,2),temp(:,i,3),depth);
temp2(:,i,:)=res2(1,:,:);
end
surf(temp2(:,:,1),temp2(:,:,2),temp2(:,:,3))
20
Приложение В: Код вычисления точек для различных
параметризаций
Параметризация (5):
procedure TBezierMesh1.CalcPoints;
var i,j, iind, jind: integer;
u,v, thing: real;
begin
iind:=0; u:=0;
while (u<=1.001) do begin
jind:=0; v:=0;
while (v<=1.001) do begin
self.points[iind,jind].x:=0;
self.points[iind,jind].y:=0;
self.points[iind,jind].z:=0;
for i:=0 to length(self.vertex)-1 do begin
for j:=0 to length(self.vertex[i])-1 do begin
thing:=self.Bernstein(self.fdimm-1,i,u)*self.Bernstein(self.fdimm-1-i,j,v);
self.points[iind,jind].x:=self.points[iind,jind].x+ self.vertex[i,j].x*thing;
self.points[iind,jind].y:=self.points[iind,jind].y+ self.vertex[i,j].y*thing;
self.points[iind,jind].z:=self.points[iind,jind].z+ self.vertex[i,j].z*thing;
end;
end;
inc(jind); v:=v+1/(self.fgridstep);
end;
inc(iind); u:=u+1/(self.fgridstep);
end;
end;
21
Параметризация (6):
procedure TBezierMesh2.CalcPoints;
var i,j, iind, jind: integer;
v,t, thing: real;
begin
iind:=0; v:=0;
while (v<=1.001) do begin
jind:=0; t:=0;
while (t<=1.001) do begin
self.points[iind,jind].x:=0;
self.points[iind,jind].y:=0;
self.points[iind,jind].z:=0;
for j:=0 to length(self.vertex)-1 do begin
for i:=0 to length(self.vertex[j])-1 do begin
thing:=self.Bernstein(self.fdimm-1,j,v)*self.Bernstein(self.fdimm-1-j,i,t);
self.points[iind,jind].x:=self.points[iind,jind].x+ self.vertex[i,j].x*thing;
self.points[iind,jind].y:=self.points[iind,jind].y+ self.vertex[i,j].y*thing;
self.points[iind,jind].z:=self.points[iind,jind].z+ self.vertex[i,j].z*thing;
end;
end;
inc(jind); t:=t+1/(self.fgridstep);
end;
inc(iind); v:=v+1/(self.fgridstep);
end;
end;
22
Параметризация (7):
procedure TBezierMesh3.CalcPoints;
var k,j, iind, jind: integer;
w,q, thing: real;
begin
iind:=0; w:=0;
while (w<=1.001) do begin
jind:=0; q:=0;
while (q<=1.001) do begin
self.points[iind,jind].x:=0;
self.points[iind,jind].y:=0;
self.points[iind,jind].z:=0;
for k:=0 to length(self.vertex)-1 do begin
for j:=0 to k do begin
thing:=self.Bernstein(k,j,q)*self.Bernstein(self.fdimm-1,self.fdimm-1-k,w);
self.points[iind,jind].x:=self.points[iind,jind].x+ self.vertex[k-j,j].x*thing;
self.points[iind,jind].y:=self.points[iind,jind].y+ self.vertex[k-j,j].y*thing;
self.points[iind,jind].z:=self.points[iind,jind].z+ self.vertex[k-j,j].z*thing;
end;
end;
inc(jind); q:=q+1/(self.fgridstep);
end;
inc(iind); w:=w+1/(self.fgridstep);
end;
end;
23
Приложение №1: Аннотация научной работы
Название научной работы : “Параметризация и визуализация усечённых
поверхностей Безье для электронной коммерции”.
ГРНТИ 28.17.33
ВУЗ: Санкт-Петербургский Государственный Инженерно-Экомический
Университет (ИНЖЭКОН).
Год завершения работы:
2007
Объём работы
17 с.
Количество приложений
10 с.
Количество иллюстраций
15 ед.
Количество таблиц
0 ед.
Количество источников литературы
5 ед.
Характеристика работы:
Цель научной работы: оптимизация существующих алгоритмов
визуализации трехмерных моделей для представления товароматериальных ценностей, реализуемых электронным способом.
Методы проведённых исследований: Анализ литературы по тематике
работы
Основные результаты научного исследования: Разработан программный
код для интерактивного моделирования порций поверхностей Безье на
треугольной и прямоугольной параметрических сетках. Рассмотрены
различные параметризации порции поверхности Безье на треугольнике,
позволяющие выполнять сшивки порций на топологически произвольных
сетках.
Наличие документа об использовании результатов: нет
Студент Капелюхин И.А
_______________________
24
Приложение №2: Сведения о студенте и его научном
руководителе
СТУДЕНТ
НАУЧНЫЙ РУКОВОДИТЕЛЬ
1. Капелюхин
1. Сергеев
2. Иван
2. Александр
3. Александрович
3. Николаевич
4. 3
4. Санкт-Петербургский
Государственный
Инженерно-Экономический
Университет
5. 198510, Санкт-Петербург, ул.
Аврова д.17/1, кв. 3
5. 03
6. 1
7. 2
8. 195271, Санкт-Петербург, ул.
Бестужевская 30, кв.5
Проректор по научной работе
____________________
Научный руководитель
____________________ Сергеев А.Н.
Студент
____________________ Капелюхин И.А.
25
Приложение №3: Сведения о научной работе
Название научной работы: “Параметризация и визуализация усечённых
поверхностей Безье для электронной коммерции”.
Раздел конкурса 99
ГРНТИ 28.17.33
Классификация научной работы – прикладная
Вид научной работы – учебная
Возможность внедрения – есть
Возможность опубликования – есть
Ключевые слова: Интерактивное геометрическое моделирование.
Поверхности Безье. 3D визуализация.
Научный руководитель ____________________ Сергеев А.Н.
Студент
____________________ Капелюхин И.А.
26
Приложение №4: Отзыв научного руководителя о
самостоятельности выполненной работы
С различными параметризациями усечённых поверхностей и основными
алгоритмами построения кривых и поверхностей Безье Капелюхин И.А.
самостоятельно разобрался. С различными параметризациями усечённых
поверхностей Безье и формализацией полученных результатов - с помощью
научного руководителя.
Все программные коды разработаны Капелюхиным самостоятельно.
В целом, можно считать, что работа самостоятельно выполнена на 80%.
Научный руководитель ____________________ Сергеев А.Н.
27
Download