PRACA DYPLOMOWA - borneqborneq.pl/wp-content/uploads/2018/02/Dyplom2018-02-22.pdf2018/02/22 ·...
Transcript of PRACA DYPLOMOWA - borneqborneq.pl/wp-content/uploads/2018/02/Dyplom2018-02-22.pdf2018/02/22 ·...
POLITECHNIKA WARSZAWSKA
Wydział Fizyki Technicznej i Matematyki Stosowanej
PRACA DYPLOMOWA
Wykonujący: Andrzej Borucki
temat:
Ocena przydatności metod eliminacji do
rozwiązywania układów równań wielomianowych
Praca została wykonana pod kierunkiem
prof. dr hab. Krzysztofa Marciniaka
Warszawa 1997
1
Spis treści
1 Wstęp 2
1.1 Zastosowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Przegląd rozwiązań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Wprowadzenie 5
2.1 Opis problemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Krzywe Beziera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Wielomiany Bernsteina . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.2 Krzywe Beziera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.3 Algorytm de Casteljau . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.4 Zmiana Baz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Trójkąty Beziera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Współrzędne barycentryczne . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Wielomiany Bernsteina . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.3 Trójkąty Beziera . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.4 Zmiana Baz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.5 Algorytm de Casteljau . . . . . . . . . . . . . . . . . . . . . . . . 21
3 Metoda podpodziału 27
3.1 Szukanie pierwiastków metodą bisekcji . . . . . . . . . . . . . . . . . . . 27
3.2 Metody przyśpieszenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.1 Warunek lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2.2 Metoda płaszczyzn ograniczających . . . . . . . . . . . . . . . . . 35
3.2.3 Metoda Newtona . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4 Testy i podsumowanie 47
4.1 Metoda płaszczyzn ograniczających . . . . . . . . . . . . . . . . . . . . . 47
4.2 Metoda Newtona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.3 Generowanie danych doświadczalnych . . . . . . . . . . . . . . . . . . . . 48
2
4.4 Testowanie czasu wykonania . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.5 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5 Inne metody 52
5.1 Algorytm PP - przecięcia rzutów wielościanów . . . . . . . . . . . . . . . 53
5.2 Algorytm LP - programowania liniowego . . . . . . . . . . . . . . . . . . 54
1 Wstęp
1.1 Zastosowanie
Fundamentalnym problemem w CAD jest sprawne wyliczanie wszystkich rozwiązań ukła-
du równań wielomianowych wewnątrz pewnej skończonej dziedziny. Problem taki możemy
zaobserwować w wielu różnych aplikacjach. Dla przykładu w CAD jest to często niezbęd-
ne do identyfikacji wszystkich charakterystycznych punktów krzywej przecięcia między
dwoma powierzchniami, ażeby móc śledzić wszystkie gałęzie krzywej. W przeważającej
większości wypadków płaszczyzny są przynajmniej kawałkami wielomianowe, musimy za-
tem rozwiązać układ nieliniowych (ale wielomianowych ) równań aby zidentyfikować te
punkty.
Podobne problemy powstają również w planowaniu ruchów robotów, obliczaniu odległości
funkcji i ekstremów, wyznaczaniu dokładnej odległości między poruszającymi się bryłami
( ślizganie się brył, wykluczanie kolizji ) oraz w wielu innych zastosowaniach CAD/CAM.
1.2 Przegląd rozwiązań
W wielu pracach badawczych z dziedziny CAD faworyzowane są trzy klasy metod do
obliczania układów nieliniowych wielomianowych: technika algebraiczna , homotopia i
podpodział . Metody te mogą być zaklasyfikowane jako globalne , ponieważ są przezna-
czone do obliczania wszystkich pierwiastków w pewnych interesujących zakresach.
Istnieje również pewna liczba lokalnych technik numerycznych , używających niektórych
wariacji iteracji Newtona - Raphsona lub numerycznej optymizacji . Metody te są bardzo
3
dokładne i wydajne ( zbieżność kwadratowa ), mają jednak tą wadę, że wymagają dobre-
go przybliżenia początkowego pierwiastka oraz nie dają pewności znalezienia wszystkich
pierwiastków. Przybliżenia początkowe uzyskiwane są zwykle poprzez niektóre rodzaje
poszukiwań globalnych. Dobre wyniki daje połączenie metod globalnych i lokalnych. Taki
hybrydowy algorytm przy szukaniu pierwiastka korzysta początkowo z metody globalnej
dając początkowe przybliżenia pierwiastka, następnie znajduje dokładny pierwiastek za
pomocą metody lokalnej - np. metody Newtona.
Przejrzyjmy się krótko trzem klasom metod globalnych:
Metody używające baz Gröbnera - klasa metod korzystająca z techniki geometrii al-
gebraicznej umożliwiająca obliczenie wszystkich zespolonych pierwiastków układu rów-
nań wielomianowych. Metody te mają wiele zalet: są eleganckie, gwarantują znalezienie
wszystkich zespolonych pierwiastków układu niezależnie od wymiaru zbioru rozwiązań
i dobrze dostosowują się do implementacji symbolicznej. Niestety, ich wadą jest nume-
ryczna niestabilność, która utrudnia implementację w arytmetyce zmiennopozycyjnej. Co
więcej - są niewydajne, jeżeli chodzi o wykorzystanie czasu procesora i pamięci, co czyni je
nieatrakcyjnymi dla wielu zastosowań. Za to często dają nam o wiele więcej informacji niż
my potrzebujemy: wiele aplikacji CAD nie wymaga znalezienia wszystkich pierwiastków,
a wyłącznie tych, które leżą w pewnym rzeczywistym n-boksie.
Drugą kategorią metod jest klasa technik homotopii (Garcia & Zangwill -[5]) Metody te
mogą być użyte do znalezienia wszystkich zespolonych rozwiązań układów wielomiano-
wych, jeżeli ilość pierwiastków jest skończona.
Niestety, przy bliższym przyjrzeniu, okazują się również numerycznie źle uwarunkowane.
Jeśli będziemy chcieli obejść ten problemu przez implementację algorytmu w dokładnej
arytmetyce wymiernej, skończy się to ogromnymi wymaganiami pamięci. Metoda homo-
topii, podobnie jak technika geometrii algebraicznej, dostarcza wiele informacji, których
nie potrzebujemy.
Trzecią klasą są metody oparte na podpodziale . Należą do niej m.in. algorytmy PP i LP
opisane przez Sherbrooke i Patrikalakisa w [15]. Techniki podpodziału bywają również
często używane w rozmaitych problemach przecinania w modelowaniu geometrycznym.
4
Sederberg [13] rozwija adaptatywny algorytm podpodziału, który może być użyty do
przecinania dwóch “planarnych” algebraicznych krzywych wyrażonych w barycentrycz-
nych bazach Bernsteina .
Patrikalakis , Prakash i Kriezis badają użycie podpodziału krzywych algebraicznych w za-
stosowaniu do przecinania algebraicznych powierzchni implicite z wymierną powierzchnią
wielomianową. Ich metoda polega na obliczaniu rzeczywistych punktów charakterystycz-
nych krzywej algebraicznej reprezentowanej w bazach Bernsteina, co zwykle pociąga za
sobą liczenie przecinania się dwóch lub trzech krzywych algebraicznych przez powtarza-
jący się podpodział i minimizację .
Minimizacja została użyta do zwiększenia precyzji wyliczania pierwiastków (wykazuje
zbieżność kwadratową ); alternatywnie, do “oczyszczenia” pierwiastka. może być użyta
iteracja Newtona-Raphsona, która jest również kwadratowo zbieżna.
Nishita [10] rozwija adaptatywną technikę podpodziału znaną jako “Bezier Clipping”
do przecinania promieni z przyciętym płatkiem wielomianowym - również przekształ-
cił problem do przecinania się dwóch krzywych algebraicznych wyrażonych w Bazach
Bernsteina. Sederberg i Nishita [14] rozszerzyli tę metodę do przecinania krzywych para-
metrycznych z płaszczyzną parametryczną.
Należy zauważyć, że technika podpodziału ma kilka wad. Po pierwsze - nie są tak ogólne
jak metody algebraiczne, ponieważ są przeznaczone do wyznaczania zero-wymiarowego
zbioru rozwiązań wewnątrz n-wymiarowego podzbioru przestrzeni euklidesowej ; co wię-
cej, mimo że szanse, że wszystkie pierwiastki zostaną znalezione zwiększają się, gdy to-
lerancja rozdzielczości jest zmniejszana , nie ma całkowitej pewności że wszystkie pier-
wiastki zostaną znalezione - w przypadku, gdy znajdują się bardzo blisko siebie .
Na koniec technika podpodziału nie dostarcza jawnych informacji na temat wielokrotności
pierwiastków bez dodatkowych obliczeń. Mimo tych przeszkód, prędkość i stabilność tych
metod czyni je atrakcyjnymi dla wielu zadań, gdzie mamy do czynienia ze znajdowaniem
pierwiastków.
5
2 Wprowadzenie
2.1 Opis problemu
Zajmę się tutaj metodą rozwiązywania układu równań wielomianowych w 2 wymiarowej
dziedzinie - trójkącie. Rozwiązywanie takich układów równań jest potrzebne m.in. gdy
chcę znaleźć punkt przecięcia dwóch krzywych parametrycznych - należy wtedy odjąć od-
powiadające sobie funkcje jednej krzywej od funkcji drugiej krzywej i poszukiwać punktu
(0,0). Zakładam, że wierzchołki trójkąta w którym poszukuję rozwiązań mają współrzęd-
ne: (0,0),(0,1),(1,0). Nie zmniejsza to w niczym ogólności metody - inną dziedzinę należy
przeskalować. Skalowanie dziedziny odbywa się poprzez podstawienie: zamiast f(x, y)
mamy f(x′, y′),
gdzie: x′ = a ∗ x+ b; y′ = c ∗ x+ d
Rozwiązanie układu dwóch równań wielomianowych z dwiema niewiadomymi jest rów-
noważne znalezieniu wszystkich wspólnych pierwiastków dwóch funkcji wielomianowych.
Dany jest układ F (x) = F (x1, x2) = (f1(x1, x2), f2(x1, x2)) = 0 = (0, 0), gdzie funkcje
f1, f2 są wielomianami stopnia n zmiennych x1, x2 z dziedziną będącą trójkątem T. Za-
daniem algorytmu jest znalezienie wszystkich pierwiastków leżących wewnątrz dziedziny.
Dokładniej: jeżeli mamy pewną funkcję f1 z R2 w R ( przyjmijmy oznaczenia: funkcja
z (x,y) w z ) - jeżeli przetniemy ją z płaszczyzną zerową (x=0) w typowym przypadku
otrzymamy zbiór rozwiązań mocy continuum - funkcję uwikłaną zmiennych x i y . Dla
drugiej funkcji f2 otrzymamy drugą funkcję uwikłaną na płaszczyźnie (x,y). Przecięcie
tych funkcji da kilka punktów, które stanowią rozwiązanie układu f1 i f2. Funkcje f1, f2
są wielomianami, można przedstawić je w bazie Bernsteina, więc będzie można skorzystać
z własności trójkątów Beziera .
Zajmę się metodą podpodziału . Jest to metoda globalna, znajdująca wszystkie pierwiast-
ki układu w tej dziedzinie.
6
2.2 Krzywe Beziera
2.2.1 Wielomiany Bernsteina
Baza wielomianów Bernsteina ma postać:
Bni (u) =(ni
)(1− u)n−iui, u ∈ [0; 1]
Najważniejsze własności wielomianów Bernsteina to:
1) ∑ni=0B
ni (u) = 1
własność ta wynika z tego, że Bni (u) są to po prostu człony rozwiniętego dwumianu
[t+ (1− t)]n
2) Bni (u) >, u ∈ [0; 1]
- dowód natychmiastowy
3) Bni (u) = (1− u)Bn−1i (u) + uBn−1
i−1 (u)
2.2.2 Krzywe Beziera
Przedstawienie krzywych w bazie wielomianów Bernsteina B zostało zaproponowane nie-
zależnie przez P. Beziera i P. de Casteljau . Krzywe Beziera definiuje się jako kombinację
liniową wielomianów Bernsteina:
Q(t) = ∑ni=0 PiB
ni (u), t ∈ [t0; t1]
gdzie współczynniki Pi są to punkty z Rn . Zależnie od n (2 lub 3) definiuje się krzy-
wą płaską lub przestrzenną. Punkty Pi noszą nazwę punktów kontrolnych albo punktów
Beziera, a łamana, której są wierzchołkami, jest nazywana łamaną Beziera . Należy od
razu wyjaśnić, że dla uniknięcia ograniczenia dziedziny funkcji stosujemy lokalną para-
metryzację:
t = t0 + u(t1 − t0), u ∈ [0; 1]
Często stosowanym przypadkiem jest n=3 - krzywa Beziera jest postaci:
Q(u) = P0(1− u)3 + P13(1− u)2u+ P23(1− u)u2 + P3u3
7
P0
P1P2
P3
Rysunek 1:
Łatwo można sprawdzić, że :
Q(0) = P0
Q(1) = P1
Q′(0) = 3(P1 − P0)
Q′(1) = 3(P3 − P2)
Z dwóch pierwszych własności wielomianów Bernsteina wynika, że krzywa leży w po-
włoce wypukłej punktów kontrolnych Pi, i = 0,1,...,n. Trzecia, rekurencyjna zależność,
prowadzi do wyznaczania punktów algorytmem de Casteljau który można wykorzystać
przy dzieleniu krzywej na mniejsze fragmenty.
2.2.3 Algorytm de Casteljau
Oblicz wartość odpowiadającą lokalnej parametryzacji
u = (t− t0)/(t1 − t0);
dla i = 0,1,...,n podstaw Pi,0 = Pi;
dla j=1,2,...,n
dla i = j,j+1,...,n
Pi,j = (1− u)Pi−1,j−1 + uPi, j − 1;
Z obliczonych wielkości można utworzyć tablicę trójkątną:
8
P0,0
P1,1
P1,0 ·
· P2,1 ·
· · · Pn,n
· · ·
Pn−1,0 ·
Pn,0Jej pierwszą kolumnę tworzą dane punkty kontrolne P krzywej Beziera, a każda następna
kolumna powstaje z punktów, które dzielą odcinek łączący sąsiednie punkty poprzedniej
kolumny w stosunku u:1-u.
P0
P1P2
P3
P1,1
P2,1
P3,1
P2,2 P3,2P3,3
Rysunek 2:
Dowodzi się [1], że Pn,n = Q(t), a wyznaczone punkty P0,0, P1,1, ..., Pn,n są punktami
kontrolnymi fragmentu krzywej od P0 do Q(t); punkty zaś Pn,n, ..., Pn,1, Pn,0 są punktami
kontrolnymi pozostałej części krzywej tzn. od Q(t) do Pn [11].
Algorytm de Casteljau pozwala zatem dzielić krzywą Beziera na mniejsze fragmenty [16]
i traktować je osobno. Jest to istotne w przypadku modelowania krzywych, gdyż prze-
sunięcie w wyjściowej łamanej choćby jednego punktu kontrolnego Pi powoduje zmianę
całej krzywej.
Jeśli chcemy wyznaczyć większą ilość punktów leżących na krzywej Beziera, to rozwiąza-
niem tańszym od przedstawionego wyżej algorytmu jest przejście od kombinacji liniowej
wielomianów Bernsteina do postaci naturalnej wielomianu Q(t) i obliczanie jego wartości
9
np. algorytmem Hornera .
2.2.4 Zmiana Baz
Niech w bazie wielomianowej P0(u)...Pn(u) ( gdzie u [0,1] ) krzywa Q(u) ma przedsta-
wienie: Q(u) = P0B0(u) + ... + PnBn(u) oraz baza Bi(u) wyraża się w bazie potęgowej
jako Bi(u) = [bi,0, ..., bi,n].[1, u, u2, ..., un]T wtedy
Q(u) =[P0 ... Pn
]·
∣∣∣∣∣∣∣∣∣∣∣∣
b0,0 ... b0,n
... ... ...
bn,0 ... bn,n
∣∣∣∣∣∣∣∣∣∣∣∣·
1
..
un
= PBU
Baza Bernsteina (dla stopnia wielomianu = 3)
BB =
1 −3 3 −1
0 3 −6 3
0 0 3 −3
0 0 0 1
Jeśli wiele punków krzywej ma być obliczonych w ustalonym układzie współrzędnych,
opłaca się przejść do bazy potęgowej to znaczy: wyznaczyć macierz współrzędnych punk-
tów macierzy G, obliczyć raz macierz: A = P ·B stosować schemat Hornera do równania
Q(u) = (PB)U = AU Jeżeli mamy podaną funkcję w bazie wielomianowej, aby przejść
do bazy Bernsteina, należy stosować macierze odwrotne:
dla 2:
1 1 1
0 1/2 1
0 0 1
dla 3:
1 1 1 1
0 1/3 2/3 1
0 0 1/3 1
0 0 0 1
10
dla 4:
1 1 1 1 1
0 1/4 1/2 3/4 1
0 0 1/6 1/2 1
0 0 0 1/4 1
0 0 0 0 1
Sposób tworzenia takich macierzy: Trójkąt Pascala:0 : 1
1 : 1 1
2 : 1 2 1
3 : 1 3 3 1
4 : 1 4 6 4 1Gdy mamy utworzyć macierz dla wielomianu stopnia N, wtedy wybieramy z trójkąta
Pascala wiersz o numerze N; elementy leżące poniżej przekątnej wypełniamy zerami;
począwszy od przekątnej trójkąt wypełniamy :
1) Dla macierzy przekształcenia zwykłego:
dla wiersza macierzy = r ,wypełniamy iloczynami liczb o numerze r z wybranego wiersza
z trójkąta Pascal przez kolejne liczby z ciągu N-r+1 wiersza trójkąta Pascala; dodatkowo
co drugą mnożymy przez (-1)
2) Dla macierzy przekształcenia odwrotnego:
ułamkami, które w liczniku mają kolejne liczby z N-tej przekątnej trójkąta, a w licz-
niku liczbę stałą dla każdego wiersza - dla kolejnych wierszy bierze się kolejne liczby z
wybranego wiersza trójkąta Pascala.
2.3 Trójkąty Beziera
2.3.1 Współrzędne barycentryczne
Jako pierwszy współrzędne barycentryczne wprowadził Moebius w 1827 roku.
definicja:
Niech T będzie trójkątem z wierzchołkami A,B,C w płaszczyźnie uv. Dowolny punkt
P ∈ T można wyrazić jednoznacznie jako kombinację liniową wierzchołków tego trójkąta
11
P=rA+sB+tC ; dodatkowo, aby była to kombinacja barycentryczna wymaga się aby
r+s+t=1. Współczynniki r,s,t noszą nazwę współrzędnych barycentrycznych punktu P w
zależności od A, B i C. Dla punktu należącego do trójkąta są spełnione własności :
r ∈ [0, 1], s ∈ [0, 1], t ∈ [0, 1]
Uwaga: Będę często przestawał rozróżniać między punktem a jego współrzędnymi bary-
centrycznymi - będę mówił po prostu o “punkcie (r,s,t)”
P
A
B
C: :u v w
Rysunek 3:
Jeśli tylko dane są dowolne cztery punkty A,B,C i P , zawsze można wyznaczyć współ-
rzędne barycentryczne r,s,t dla P; równości:P = r · A+ s ·B + t · C
r + s+ t = 1mogą być przedstawione jako układ trzech równań liniowych dla trzech niewiadomych
r,s,t . Rozwiązanie można uzyskać przez zastosowanie wzorów Cramera :
r = pole(P,B,C)pole(A,B,C)
s = pole(A,P,C)pole(A,B,C)
t = pole(A,B,P )pole(A,B,C)
Wymagają one liczenia wyznaczników:
Pole(A,B,C) = 12 ·
∣∣∣∣∣∣∣∣∣∣∣∣
Ax Bx Cx
Ay By Cy
1 1 1
∣∣∣∣∣∣∣∣∣∣∣∣gdzie Det = AxBy +BxCy + CxAy − AyBx −ByCx − CyAx
12
Zauważmy, że aby wzory były dobrze zdefiniowane - pole trójkąta (A,B,C) musi się różnić
od 0, co oznacza, że A,B i C nie mogą leżeć na jednej linii.
Współrzędne barycentryczne są afinicznie niezmienne: Niech P ma barycentryczne współ-
rzędne r,s,t w zależności od punktów A,B,C. Odwzorowujemy wszystkie cztery punkty
na inny zbiór przez odwzorowanie afiniczne. Wtedy P ma te same barycentryczne współ-
rzędne r,s,t w zależności od A , B , C.
Rysunek 4:
Dowolne trzy niewspółliniowe punkty A,B,C definiują układ współrzędnych barycentrycz-
nych na płaszczyźnie. Punkty wewnątrz trójkąta mają nieujemne współrzędne barycen-
tryczne, podczas gdy pozostałe mają niektóre współrzędne barycentryczne ujemne.
Możemy użyć współrzędnych barycentrycznych do definiowania liniowej interpolacji. Przyj-
mijmy, że mamy dane trzy punkty P1, P2, P3 ∈ R3. Wtedy punkt zadany wzorem:
P = P (r, s, t) = rP1 + sP2 + tP3 (gdzie r + s+ t = 1)
leży w płaszczyźnie rozpiętej przez P1, P2, P3 Odwzorowanie z R2 do R3 jest nazywane
liniową interpolacją.
Ponieważ r + s + t = 1, możemy interpretować r,s,t jako współrzędne barycentryczne P
względem P1, P2, P3 . Możemy również interpretować r,s,t jako współrzędne barycentrycz-
ne punktu w R2 względem pewnego trójkąta A,B,C ∈ R2. Wtedy powyższy wzór może
być interpretowany jako odwzorowanie trójkąta A,B,C ∈ R2 na trójkąt P1, P2, P3 ∈ R3.
Trójkąt A,B,C nazwiemy trójkątem dziedziny. Uwaga: aktualne położenie lub kształt
trójkątnej dziedziny jest zupełnie nie związany z definicją liniowej interpolacji (oczywi-
ście musimy wymagać, aby był niezdegenerowany).Ponieważ możemy interpretować r,s,t
13
jako współrzędne barycentryczne zarówno dla 2 lub 3 wymiarów, to pociąga za sobą, że
liniowa interpolacja jest odwzorowaniem afinicznym .
2.3.2 Wielomiany Bernsteina
W przypadku dwóch zmiennych wielomiany Bernsteina Bi,j,k są definiowane przez:
Bni,j,k(u) =(ni,j,k
)risjtk = n!
i!j!k!risjtk gdzie r+s+t=1
Definiujemy dodatkowo Bni,j,k(u) = 0 jeśli pewne (i,j,k) są ujemne.
Wykresy niektórych funkcji Bernsteina:
Rysunek 5: (1− x− y)2
Rysunek 6: (1− x− y) · x
14
Rysunek 7: (1− x− y) · y
Rysunek 8: x · y
Wielomiany te mają własności analogiczne do własności wielomianów jednej zmiennej.
Dokładniej:
1) ∑i+j+k=ni,j,k>0
Bni,j,k(r, s, t) = 1
2) Bnr,s,t > 0 dla r, s, t ∈ [0; 1]
3) Bni,j,k(u) = rBn−1i−1,j,k(u) + sBn−1
i,j−1,k(u) + tBn−1i,j,k−1(u); i+ j + k = n
Jest to wzór rekurencyjny, który wynika z definicji i z użycia równości:(nk
)=(n−1k−1
)+(n−1k
)Jako przykład wielomian Bernsteina stopnia 4 pokazany jest na schemacie:
15
s4
4s3t 4rs3
6s2t2 12rs2t 6r2s2
4st3 12rst2 12rst2 4r3s
t4 4rt3 6r2t2 4r3t r4
2.3.3 Trójkąty Beziera
De Casteljau wprowadził trójkąty Beziera w 1959 r. Zauważmy, że są one bardziej “na-
turalnym” uogólnieniem krzywych Beziera na powierzchnie niż płatki produktów tenso-
rowych. [4] Dla funkcji 2 stopnia 2 zmiennych jest 6 parametrów: x2, x, 1, y2, y, xy dla 3
stopnia 10 parametrów:1
x y
x2 xy y2
x3 x2y xy2 y3
czyli dla n suma stopni dla x i y nie może przekraczać n; oznacza to np. że jeże-
li w pewnym równaniu zapisanym przy pomocy bazy wielomianowej występuje x2 +
y2 można je przekonwertować na bazę Bernsteina dla stopnia co najmniej 4. Liczba
parametrów=1/2(n+1)(n+2) i jest równa liczbie współczynników w trójkąta Beziera
. Trójkątny płat (u, v) ∈ T powierzchni Beziera definiuje się następująco: S(u, v) =∑i+j+k=ni,j,k>0
Pi,j,kBni,j,k(r, s, t) gdzie Pi,j,k są danymi punktami kontrolnymi, a Bi,j,k wie-
lomianami Bernsteina postaci: Bnr,s,t = n!i!j!k!r
isjtk
Powierzchnia Beziera definiowana w obszarze trójkątnym jest określona 1/2(n+1)(n+2)
punktami Pi,j,k i odpowiadającymi im składnikami wielomianu.
16
P0,3,0
P1,2,0P0,2,1
P1,1,1 P2,1,0
P0,1,2
P0,0,3
P1,0,2 P2,0,1P3,0,0
Rysunek 9:
Z dwóch pierwszych własności wielomianów Bernsteina wynika, że trójkątny płatek Bez-
iera leży wewnątrz powłoki wypukłej swoich punktów kontrolnych, a trzecia własność
jest podstawą algorytmu obliczania wartości S(u,v) - algorytmu de Casteljau dla trójką-
tów Beziera, za pomocą którego można dzielić trójkąt na części. (Zheng [17] i Zhou [18]
omawiają warunki na wypukłość trójkątów Beziera )
2.3.4 Zmiana Baz
Dla wielomianu stopnia n mamy (n+1)(n+2)/2 współczynników i tyle samo punktów
liczy siatka kontrolna na trójkącie. Przykładowo, dla wielomianu stopnia n=2 mamy
współczynniki:1
x y
x2 xy y2
natomiast siatka punktów kontrolnych ma postać:
17
a00
a01 a10
a02 a11 a20
Aby przetransformować współczynniki bazy wielomianowej na
siatkę punktów kontrolnych czy odwrotnie, potrzebna jest znacznie większa macierz niż
w przypadku krzywych - musi być to macierz N x N gdzie N=(n+1)(n+2)/2. Powstaje
problem kolejności współczynników - dla jednego wymiaru macierz transformowała bazę
typu 1, x, x2, x3, ... na kolejne współczynniki bazy Bernsteina; tutaj należałoby dzielić na
sekcje: najpierw 1, potem x,y ; następnie x2, xy, y2 itd.. Powstaje baza składająca się z
(n + 1)2 bloków. Spróbuję tu wyprowadzić macierz przekształcenia dla stopnia n = 2:
(dla trójkąta mającego wierzchołki : (0,0),(0,1),(1,0) )
f(x,y) = a00(1-x-y)2 + a012(1-x-y)x + a02x2 + a102(1-x-y)y + a112xy + a20y2 = x2(a00-
2a01+a02) + 2xy(a00-a01-a10+a11) + 2x(a01-a00) + y2(a00-2a10+a20) + 2y(a10-a00)
+ a00 1: a00 x: 2(a01-a00) y: 2(a10-a00) x2: a00-2a01+a02 xy: 2(a00-a01-a10+a11) y2:
a00-2a10+a20 Jeżeli chodzi o kolejność współczynników aij, również dzielę je na sekcje: w
pierwszej występuje tylko a00, w drugiej a01 i a10, w trzeciej a02, a11 i a20 itd. Ogólnie
w sekcji numer n+1 będą współczynniki aij, dla których i+j = n. Powstaje macierz:∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 0 0 0 0 0
−2 2 0 0 0 0
−2 0 2 0 0 0
1 −2 0 1 0 0
2 −2 −2 0 2 0
1 0 −2 0 0 1
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣Dla stopnia 3 będziemy mieli macierz:
18
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 0 0 0 0 0 0 0 0 0
−3 3 0 0 0 0 0 0 0 0
−3 0 3 0 0 0 0 0 0 0
3 −6 0 3 0 0 0 0 0 0
6 −6 −6 0 6 0 0 0 0 0
3 0 −6 0 0 3 0 0 0 0
−1 3 0 −3 0 0 1 0 0 0
−3 6 3 −3 −6 0 0 3 0 0
−3 3 6 0 −6 −3 0 0 3 0
−1 0 3 0 0 −3 0 0 0 1
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣Do przeliczania z bazy wielomianowej na bazę Bernsteina będziemy potrzebowali macierzy
odwrotnych: dla 2:∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 0 0 0 0 0
1 1/2 0 0 0 0
1 0 1/2 0 0 0
1 1 0 1 0 0
1 1/2 1/2 0 1/2 0
1 0 1 0 0 1
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣dla n=3:∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 0 0 0 0 0 0 0 0 0
1 1/3 0 0 0 0 0 0 0 0
1 0 1/3 0 0 0 0 0 0 0
1 2/3 0 1/3 0 0 0 0 0 0
1 1/3 1/3 0 0/3 0 0 0 0 0
1 0 2/3 0 0 1/3 0 0 0 0
1 1 0 1 0 0 1 0 0 0
1 2/3 1/3 1/3 1/3 0 0 1/3 0 0
1 1/3 2/3 0 1/3 1/3 0 0 1/3 0
1 0 1 0 0 1 0 0 0 1
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣Tutaj prawidłowość tworzenia takich macierzy staje się widoczna dopiero od n=4 czy
19
nawet 5.
Algorytm tworzenia tego typu macierzy korzystający z trójkąta Pascala:
procedure MakePascal;
var i,j:integer;
begin
Pascal[0,0]:=1;
for i:=1 to stopien do
begin
Pascal[i,0]:=1;
for j:=1 to i-1 do Pascal[i,j]:=Pascal[i-1,j-1]+Pascal[i-1,j];
Pascal[i,i]:=1;
end;
end;
procedure MakeMac;
var i,j:integer;
x0,y0,x1,y1,delta0,delta1:integer;
wartosc:real;
begin
for y0:=0 to stopien do
for x0:=0 to stopien do
begin
delta0:=y0-x0;
if delta0>=0 then
for y1:=0 to y0 do
for x1:=0 to x0 do
begin
delta1:=y1-x1;
if (delta1>=0)and(delta1<=delta0) then
wartosc:=pascal[stopien,delta0]*pascal[stopien-delta0,x0]*
pascal[x0,x1]*pascal[delta0,delta1]
20
else wartosc:=0;
if odd(delta0) then wartosc:=-wartosc;
Mac[round(y0*(y0+1)/2+y1),round(x0*(x0+1)/2+x1)]:=wartosc;
end{for x1};
end{for x0};
end;
procedure MakeMacOdw;
var i,j:integer;
x0,y0,x1,y1,delta0,delta1:integer;
wartosc:real;
begin
for y0:=0 to stopien do
for x0:=0 to stopien do
begin
delta0:=y0-x0;
if delta0>=0 then
for y1:=0 to y0 do
for x1:=0 to x0 do
begin
delta1:=y1-x1;
if (delta1>=0)and(delta1<=delta0) then
wartosc:=1/pascal[y0,y1]*pascal[delta0,delta1]
/pascal[stopien,y0]*pascal[stopien-x0,stopien-y0]
else wartosc:=0;
Mac[round(y0*(y0+1)/2+y1),round(x0*(x0+1)/2+x1)]:=wartosc;
end{for x1};
end{for x0};
end;
21
(notka: S. Lodha i R. Goldman [9] podają swoje algorytmy na konwersję wielomianów
wyrażonych w różnych bazach : wielomianowej i Beziera .)
2.3.5 Algorytm de Casteljau
Algorytm de Casteljau wyznaczania punktów trójkątnego płata powierzchni Beziera jest
zupełnie analogiczny do algorytmu dla krzywych, a główne różnice występują w notacji.
M.in. algorytm dla krzywych używa powtarzającej się liniowej interpolacji, również w
przypadku trójkątów jest ona używana. (Jankowski [8] ) Dane: trójkątna tablica punktów
Pi,j,k ∈ R2 Siatka punktów kontrolnych ma strukturę trójkąta. W przypadku stopnia =
4, siatka kontrolna składa się z:P040
P031 P130
P022 P121 P220
P013 P112 P211 P310
P004 P103 P202 P301 P400
Zauważmy, że wszystkie indeksy
sumują się do 4, W ogólności, siatka kontrolna posiada 1/2(n+1)(n+2) wierzchołków.
Algorytm:
1. Oblicz współrzędne barycentryczne (r,s,t) punktu (u,v) rozwiązując układ 3 równań
liniowych
rA+sB+tC = [u,v]
r+s+t = 1
pierwsza równość rozkłada się na dwie
2. Dla wszystkich i,j,k>=0, takich, że i+j+k=n, podstaw P 0i,j,k = Pi,j,k
3. Dla m=1,2,...,n dla wszystkich i,j,k>=0, takich że i+j+k=n-m oblicz
Pmi,j,k = rPm−1i+1,j,k + sPm−1
i,j+1,k + tPm−1i,j,k+1
Dowodzi się , że S(u, v) = Pn0,0,0
22
A
B
C
Rysunek 10:
Mówiąc obrazowo : gdy mamy wielomian stopnia n, wtedy siatka kontrolna liczy 1/2(n+1)(n+2)
wierzchołków i n2 trójkątów siatki; dla n=3 siatka kontrolna składa się z 9 trójkątów,
z czego wybieramy co drugi trójkąt i na podstawie danych r,s,t liczymy wierzchołki;
wierzchołki obliczone na podstawie 6 wybranych trójkątów tworzą siatkę następnej war-
stwy; w przypadku algorytmu dla krzywych tworzyliśmy kolejne kolumny na podstawie
poprzednich, tutaj tworzymy kolejne warstwy trójkątnych siatek o zmniejszających się
rozmiarach; na podstawie ostatniej warstwy możemy obliczyć pojedynczy wierzchołek,
którego wartość będzie równa wartości funkcji dla r,s,t,; Podobnie jak to miało w miejsce
w przypadku krzywych Beziera, algorytm de Casteljau można zastosować do podziału
trójkątnego płatu na fragmenty. Algorytm de Casteljau dla trójkątnych płatków jest bez-
pośrednim uogólnieniem odpowiedniego algorytmu dla krzywych. Tam oprócz tego, że
otrzymaliśmy wartość funkcji dla danego parametru, dodatkowo otrzymywaliśmy punkty
kontrolne dla dwóch krzywych. Tutaj można otrzymać punkty kontrolne dla trzech pod-
trójkątów , które powstają przez podział bazowego trójkąta w miejscu odpowiadającym
współrzędnym barycentrycznym r,s,t.
23
B
A
C
Rysunek 11:
W algorytmie dla krzywych można było wybrać punkty, które stanowiły punkty kontro-
lne dwóch podkrzywych . Tutaj można z kolejnych warstw wybrać punkty, które będą
stanowiły siatkę punktów kontrolnych dla nowopowstałego podtrójkąta . Z każdej war-
stwy wybieramy punkty leżące na krawędzi, tworzą one kolejne warstwy siatki kontrolnej
szukanego trójkąta. W ten sposób algorytm de Casteljau pozwala dzielić powierzchnie na
mniejsze fragmenty i traktować je osobno.
A
B
C
P
Rysunek 12:
Bazując na algorytmie de Casteljau możemy dostać wiele własności trójkątów Bezie-
24
ra: Afiniczna niezmienność : ta własność bierze się z tego, że liniowa interpolacja jest
odwzorowaniem afinicznym oraz, że algorytm de Casteljau używa wyłącznie liniowej in-
terpolacji.
Własność powłoki wypukłej - jest zagwarantowana, ponieważ dla 0 <= r, s, t <= 1 każdy
Pmi,j,k jest wypukłą kombinacją poprzedniego Pm−1i,j,k . Krzywe brzegowe trójkątnego płatka
są określone przez brzegowe punkty kontrolne (mające co najmniej jedno zero w indeksie).
Dla przykładu punkt na krzywej brzegowej Pn(r, 0, t) jest generowany przez
Pmi,j,k(r, 0, t) = rPm−1i+1,j,k + tPm−1
i,j,k+1 ; r+t=1
Jeżeli punkt podziału wybierzemy na krawędzi trójkąta, wtedy jeden z podtrójkątów
zdegeneruje się do odcinka.
A
B
C
P
Rysunek 13:
Gdy wybierzemy jako punkt podziału środek najdłuższej krawędzi otrzymamy algorytm
bisekcji będący szczególnym przypadkiem algorytmu de Casteljau .
Interesujący, ze względu na upraszczanie się obliczeń, jest przypadek, kiedy trójkąt pro-
stokątny (w dodatku równoramienny) dzielimy przez środek najdłuższej krawędzi.
25
A
B
C
P1
2
Rysunek 14:
Jeżeli trójkąt prostokątny jest zorientowany równolegle do układu współrzędnych, uprasz-
cza to dodatkowo obliczenia, ale aby własność ta była zachowana, należy jeszcze podzielić
powstałe trójkąty; w ten sposób trójkąt dzielimy od razu na cztery podtrójkąty; ma to
również tę zaletę, że podtrójkąty mają średnicę dokładnie dwa razy mniejszą od trójkąta
bazowego.
A
B
C
P1
2
34
Rysunek 15:
W. Boehm [2] przedstawia algorytmy Haase’go i de Casteljau podziału krzywych oraz
algorytm na podział trójkątów Beziera. R Goldman prezentuje również [6] różne sposo-
by podziału trójkątnego płata na fragmenty. Boehm i Farin w swoim “Letter to editor”
26
[3] krótko opisują trzy różne sposoby podziału trójkąta Beziera. Pierwszym jest sposób
opisany powyżej, czyli podział trójkąta jednym wierzchołkiem. Drugi sposób pozwala na
obliczenie siatki dla podtrójkąta, którego dwa wierzchołki znajdują się w dowolnym miej-
scu wewnątrz bazowego trójkąta, a trzeci wierzchołek w wierzchołku bazowym. Dla tego
przypadku wymagane jest policzenie dwukrotnie większej liczby warstw. Trzeci sposób
pozwala wyliczyć siatkę dla dowolnego podtrójkąta zawartego w trójkącie bazowym. Jego
wadą jest wielka złożoność obliczeniowa: w przypadku podziału jednym wierzchołkiem,
do wyliczenia jego wartości należało obliczyć n warstw, z których można było wybrać
wartości innych punktów kontrolnych; tutaj dla każdego punktu kontrolnego musimy
obliczyć n warstw.
27
3 Metoda podpodziału
3.1 Szukanie pierwiastków metodą bisekcji
Mamy dane funkcje wielomianowe dwóch zmiennych : f1 i f2 .Należy przedstawić je w
bazie Bernsteina. Otrzymamy dwie funkcje na trójkącie T. Funkcje te można przedstawić
za pomocą siatki dwuwymiarowych punktów kontrolnych trójkątnego płatka Beziera:
Pi,j,k =
∣∣∣∣∣∣∣∣f1i,j,k
f2i,j,k
∣∣∣∣∣∣∣∣ gdzie0 6 i, j, k
i+ j + k = n
Należy znaleźć takie punkty, dla których obie funkcje osiągają zero. Szukanie odbywa się
za pomocą podziału podejrzanych trójkątów za pomocą algorytmu de Casteljau. Punkt
podziału trójkąta wybieramy na najdłuższej krawędzi, w ten sposób mamy pewność,
że średnica trójkątów będzie się zmniejszała; w przeciwnym razie powstawałyby coraz
cieńsze trójkąty, których pole dążyłoby do zera, ale ich średnica pozostawałaby cały czas
duża.
Opis algorytmu
1.Bierzemy trójkąt jednostkowy o wierzchołkach: (0,0),(1,0) i (0,1); jeżeli funkcji szukamy
w innej dziedzinie - funkcję i dziedzinę (u,v) należy odpowiednio przeskalować.
2.Dzielimy trójkąt na 4 podtrójkąty . Stosując kryterium opisane poniżej określamy, które
trójkąty nie zawierają na pewno pierwiastka , które zawierają pierwiastek, a dla jakich
trójkątów nie możemy tego rozstrzygnąć. Trójkąty nie zawierające pierwiastków można
wyeliminować z dalszych rozważań, zawierające pierwiastek dołączamy do zbioru rozwią-
zań, natomiast pozostałe dzielimy dalej.
Jeżeli nie możemy wyeliminować możliwości istnienia pierwiastka na danym trójkącie a
jego średnica jest mniejsza niż pewne - wtedy uznajemy , że na tym trójkącie występuje
pierwiastek. Postępujemy tak dopóki występują trójkąty, które można podzielić.
Wykorzystujemy własność trójkątnego płatka Beziera: trójkątny płatek Beziera zawie-
ra się wewnątrz powłoki wypukłej swoich punktów kontrolnych. Sprawdzamy wszystkie
punkty kontrolne i patrzymy czy jakiś punkt mieścił się w zakresie:
a <-
28
b - ...
c >
Na podstawie tego, w jakich przedziałach zaobserwowaliśmy istnienie punktów kontrol-
nych, możemy stwierdzić, czy funkcja na danym trójkącie przecina płaszczyznę zerową:
<- - .. > pierwiastek
nie ma nie ma jest nie ma
nie ma jest nie ma jest
nie ma jest jest nie wiadomo
jest nie ma nie ma nie ma
jest nie ma jest nie wiadomo
jest jest nie ma nie wiadomo
jest jest jest nie wiadomo
Tabela 1:
( przypadek, gdy nie ma w żadnym przedziale - odrzucamy )
Dla obu funkcji jednoczesne wystąpienie zera na danym trójkącie związane jest zależno-
ścią:
na pierwszym na drugim ogólnie
jest jest jest
jest nie wiadomo nie wiadomo
jest nie ma nie ma
nie wiadomo jest nie wiadomo
nie wiadomo nie wiadomo nie wiadomo
nie wiadomo nie ma nie ma
nie ma jest nie ma
nie ma nie wiadomo nie ma
nie ma nie ma nie ma
Tabela 2:
29
( to sprawdzenie będę nazywał testem podstawowym w odróżnieniu od dodatkowych
metod, za pomocą których można stwierdzić, że dany trójkąt nie zawiera pierwiastka)
Podziału dokonujemy w środku najdłuższej krawędzi za pomocą algorytmu de Castel-
jau i wyznaczamy punkty kontrolne dla obu powstałych trójkątów. Następnie stosujemy
powyższy algorytm analogicznie do obu powstałych pod-trójkątów.
A
B
C
P1
2
34
Rysunek 16:
Przykłady: Niech T będzie trójkątem dla którego pierwsza funkcja ma współczynniki1
−1/4 0
−1 −1/4 1a druga1
1/2 1/2
0 0 −1Nie można rozstrzygnąć, czy w trójkącie są pierwiastki. Po podziale na 4 podtrojkąty:
T1, T2, T3, T4 okazuje się, że tylko trójkąt T2 można odrzucić ponieważ nie ma żadnych
pierwiastków. Podejrzane o istnienie pierwiastków są : T1, T3 i T4. Jeżeli podzielimy T1
,okazuje się, że wszystkie podtrójkąty trójkąta T1 możemy odrzucić. Można by zasta-
nawiać się, dlaczego na podstawie własności powłoki wypukłej nie mogliśmy odrzucić
trójkąta, skoro po podziale na cztery podtrójkąty, odrzuciliśmy wszystkie. Związane jest
30
to z warunkiem istnienia jednoczesnego pierwiastka na trójkącie: mamy dwie funkcje f1
i f2 na trójkącie. Zarówno f1 jak i f2 na trójkącie przyjmują wartości dodatnie i ujemne.
Przykładowa sytuacja: (gdy podział na dwa) funkcja f1 w części A przyjmuje wartości
tylko dodatnie (i wszystkie współczynniki Beziera ma dodatnie), natomiast w części B,
zarówno dodatnie jak i ujemne. Funkcja f2 w części A przyjmuje dodatnie i ujemne war-
tości, a w B tylko ujemne (i wszystkie współczynniki Beziera ma ujemne). Widać, że
części zarówno A jak i B można odrzucić ponieważ dla każdej części któraś z funkcji nie
osiąga zera - natomiast o całym trójkącie nie można tego powiedzieć.
W pierwszym kroku mamy trójkąty : T1, T3, T4
Wdrugim kroku nadal mamy 3 trójkąty podejrzane o zawieranie pierwiastka : T31, T43, T44
W trzecim kroku : T431, T441, T444,
W czwartym : T4413, T4441, T4442
W typowym przypadku (dla jednego pierwiastka w dziedzinie) niezależnie od średnicy
trójkątów, przeważnie zostają trzy, czasem dwa trójkąty, które są podejrzane. Procedura
szukająca pierwiastków w przypadku gdy stwierdzi, że kilka trójkątów sąsiaduje ze sobą,
mogłaby traktować je jako jeden obszar podejrzany o zawieranie pierwiastków; dokładność
byłaby określona najmniejszym boksem zawierającym te trójkąty.
Pewnym problemem związanym z faktem, że istnieje kilka trójkątów podejrzanych jest
zwiększona liczba obliczeń. Przypuśćmy, że mamy trzy trójkąty, dzielimy je na 4 części,
w ten sposób mamy 12 podtrójkątów, które musimy przebadać, aby pozostawić znowu 3.
Czy w takim przypadku nie opłacałoby się bardziej dzielić trójkąt na dwie części zamiast
na cztery? Okazuje się, że nie: gdy mamy 3 trójkąty - po podziale każdego na połowę
powstaje 6 trójkątów, które należy przetestować. Z tych 6 trójkątów nie można odrzucić
trzech (ilość trójkątów jest niezależna od ich średnicy). W następnym kroku dzielimy
te trójkąty na połowy i znowu musimy przebadać 6 trójkątów. Ogólnie testujemy na
obecność pierwiastka 12 trójkątów - tyle samo, co przy podziale na cztery, tyle że tutaj
w dwóch krokach, a poza tym komplikują się obliczenia w związku z tym, że trójkąty nie
leżą równolegle do osi współrzędnych.
Uwaga: przy bardzo małej średnicy trójkątów zaczyna gwałtownie wzrastać ich liczba.
31
Przyczyną jest to, że ich średnica staje się porównywalna z ε - stałą użytą w teście powłoki
wypukłej. Dla małej średnicy wartości wszystkich punktów kontrolnych mieszczą się w
przedziale -... , co oznacza że w trójkącie na pewno istnieje pierwiastek i dalszy podział
trójkąta nie ma sensu. W powyższym przykładzie, dla średnicy około 2* ilość trójkątów
zwiększa się do 6, dla średnicy trójkąta porównywalnej z ε - do 12; ogólnie dla tego
przykładu średnica/* liczba_trojkatow oscyluje koło 10.7. Czy nie można by rozwiązać
problemu przez ustalenie, że ε = 0 ?
Stosowanie jest związane z eliminowaniem wpływu błędów maszynowych: gdyby nie
uwzględniać badanie istnienia pierwiastków ograniczałoby się do przypadków: wszyst-
kie punkty kontrolne leżą po tej samej stronie płaszczyzny zerowej - i wtedy nie ma
pierwiastka, lub punkty kontrolne leżą zarówno po jednej, jak i po drugiej stronie płasz-
czyzny zerowej - i wtedy nie wiadomo. (jeżeli istniałby punkt o wartości dokładnie równej
zero - byłby traktowany, że należy do obu przedziałów, wskutek stosowania nierówności
nieostrych). Ma to jednak wadę: przypuśćmy, że na pewnym trójkącie wszystkie punk-
ty mają wartości dodatnie, oprócz jednego o wartości <0 z tym, że bardzo bliskiego 0.
Wtedy z powodu błędów maszynowych punkt mógłby być potraktowany jako dodatni i
trójkąt byłby wyrzucony z dalszych rozważań, mimo że mógłby zawierać pierwiastek.
Podsumowując -ε powinno być bardzo małe, uzależnione od wartości błędu maszynowego,
natomiast gdy średnica trójkątów będzie tylko nieznacznie większa niż ε, nie powinny być
dalej dzielone.
3.2 Metody przyśpieszenia
3.2.1 Warunek lambda
Zajmę się tutaj testem, dzięki któremu można wyeliminować z rozważań niektóre trójkąty
które dotychczas były dalej dzielone.
Niech P ∈ T będzie pierwiastkiem, czyli f1(P ) = 0 oraz f2(P ) = 0. Metoda lambda
opiera się na fakcie, że również dowolna kombinacja funkcji f1 i f2 na P musi zawsze
dawać 0, stąd f1(P ) + λ · f2(P ) = 0 dla dowolnego (bo 0 + λ · 0 = 0)
Weźmy teraz dwie funkcje na trójkącie T. Każda z tych funkcji może przecinać płaszczy-
32
znę zerową, co jednak nie oznacza, że muszą mieć wspólny pierwiastek. Weźmy kombinację
tych funkcji: λ1 · f1(x) +λ2 · f2(x) dla punktów x należących do T . Nie zmieni problemu
ograniczenie się tylko do kombinacji typu f1(x) + λ · f2(x) - ponieważ jedyna różnica
będzie występowała w skali (oprócz przypadku : λ1 = 0, co jednak sprowadza się do
przeskalowanej funkcji f2). Dla niektórych λ (dodatnich lub ujemnych) kombinacja może
przecinać powierzchnię zerową, dla innych nie. Jeżeli na trójkącie będzie istniał pier-
wiastek, wtedy dowolna kombinacja będzie musiała przecinać się z powierzchnią zerową.
W drugą stronę - jeżeli uda nam się znaleźć przynajmniej jedno λ takie, że kombinacja
osiąga wartości dodatnie lub ujemne na całym trójkącie, wtedy możemy stwierdzić, że
trójkąt nie zawiera pierwiastków. Gdy funkcje mamy przedstawione za pomocą punktów
kontrolnych Pi, wtedy szukamy takiego λ, aby f1(Pi) + λ · f2(Pi) było większe od zera
dla każdego punktu kontrolnego (albo mniejsze od zera).
Powstaje problem: w jaki sposób można znaleźć λ spełniające powyższy warunek, skoro
λ może być dowolną liczą rzeczywistą? Dla pojedynczego punktu Pi funkcja f1(Pi) + λ ·
f2(Pi) osiąga zero w miejscu r = −f1(Pi)/f2(Pi); dla lambda mniejszego od r funkcja ma
znak przeciwny do f2(Pi), a dla większego od r znak zgodny z f2(Pi); dla f2(Pi) funkcja
ma znak zgodny z f1(Pi).
Dla większej ilości punktów należy obliczać części wspólne zakresów, dla których funkcje
są większe, bądź mniejsze od zera. Gdy dla wszystkich punktów część wspólna zakresów,
gdzie funkcje przybierają wartości dodatnie lub ujemne jest niepusta, wtedy będzie można
wyeliminować trójkąt.
Algorytm znajdowania części wspólnej:
PlusFrom=-MaxFloat; PlusTo=+MaxFloat;
MinusFrom=-MaxFloat; MinusTo=+MaxFloat;
Po wszystkich punktach:
{ wylicz k:=-f1/f2
jezeli f2 dodatnie:
{
PlusFrom:=max(PlusFrom,k);
33
MinusTo:=min(MinusTo,k)
}
else gdy ujemne
{
PlusTo:=min(PlusTo,k);
MinusFrom:=max(MinusFrom,k);
}
else gdy=0
{
gdy f1 ujemne - znika przedzial dodatni czyli:
{PlusFrom:=+MaxFloat; PlusTo:=-MaxFloat}
gdy f1 dodatnie - znika przedzial ujemny czyli:
{MinusFrom:=+MaxFloat; MinusTo:=-MaxFloat}
gdy f1=0 - mozna przerwac petle - bo nie mozna znalezc odpowiedniego lambda
}
istnieje przedzial dodatni jezeli PlusTo>PlusFrom
istnieje przedzial ujemny jezeli MinusTo>MinusFrom
Działanie testu lambda prześledzę na tym samym trójkącie co w poprzednim przykładzie.
punkty kontrolne pierwszej funkcji:1
−1/4 0
−1 −1/4 1drugiej funkcji:1
1/2 1/2
0 0 −1Poprzednio podzieliłem trójkąt na cztery podtrójkąty, jeden mogłem wyrzucić (tzn. trój-
kąt o numerze 2), ale pozostały trzy. Dla tych trzech zastosuję teraz warunek lambda.
Pierwszy trójkąt:
34
f1 f2 zakres
-0.125 0.5 dla (−∞; 0.25) ujemne
-0.625 0.25 dla (−∞; 2.5) ujemne
-1 0 zawsze ujemne
0.125 0.5 dla (−∞; -0.25) ujemne
-0.25 0.25 dla (−∞; 1) ujemne
0.5 0.25 dla (−∞; -2) ujemne
Tabela 3:
Widać stąd, że dla lambda należącego do przedziału (−∞;−2) suma dla każdego punktu
jest ujemna, czyli można wyrzucić trójkąt z rozważań - co pokazuje przydatność warunku
lambda
Drugi trójkąt:
f1 f2 zakres
-0.125 -0.25 dla(−∞; -0.5) dodatnie
0.375 -0.5 dla(−∞; 0.75) dodatnie
1 -1 dla(−∞; 1) dodatnie
0.125 0 zawsze dodatnie
0.5 -0.25 dla(−∞; 2) dodatnie
0.5 0.25 dla(−∞; -2) ujemne
Tabela 4:
Dla lambda z przedziału (-2;-0.5) wszystkie sumy są ujemne - również można wyrzucić.
Trzeci trójkąt:
35
f1 f2 zakres
-0.125 -0.25
0.125 0 zawsze dodatnie
0.5 0.25
-0.625 0 zawsze ujemne → widać że nie istnieje takie λ
-0.25 0.25
-1 0 zawsze ujemne
Tabela 5:
Tutaj widać, że nie istnieje żaden zakres, dla którego kombinacja dla wszystkich punktów
byłaby dodatnia lub ujemna. Przykład ten pokazuje, jak silny jest warunek lambda; pod-
czas gdy test podstawowy (powłok wypukłych) z czterech podtrójkątów wyeliminował
tylko jeden, tutaj można było wyeliminować pozostałe dwa i zostawić tylko ten podtrój-
kąt, który rzeczywiście zawierał pierwiastek. Co więcej - gdy testowałem warunek lambda
na powyższym przykładzie, w prawie wszystkich krokach otrzymywałem tylko jeden trój-
kąt, który był podejrzewany o zawieranie pierwiastka, za wyjątkiem jednego przypadku,
gdy krawędź jednego z trójkątów leżała niemal na samym pierwiastku.
3.2.2 Metoda płaszczyzn ograniczających
Metodę płaszczyzn ograniczających stosujemy do ograniczenia obszaru podejrzewanego
o istnienie pierwiastków. Jeżeli mamy daną funkcję f1 na trójkącie A,B,C , wtedy dla
punktów A,B,C funkcja przyjmuje wartości równe wartościom węzłów w tych punktach.
Definiujemy płaszczyznę Z0, która przechodzi przez te trzy punkty. Oprócz tego okre-
ślamy dwie płaszczyzny Zg i Zd, które są równoległe do Z0 , przy czym pomiędzy Zg i
Zd mieszczą się wartości wszystkich punktów kontrolnych funkcji na trójkącie. Oznacza
to, że między płaszczyznami mieści się pokrycie wypukłe funkcji, a z własności pokry-
cia wypukłego mamy pewność że wszystkie wartości funkcji mieszczą się pomiędzy tymi
płaszczyznami.
36
Rysunek 17:
Teraz należy znaleźć przecięcie tych płaszczyzn z płaszczyzną zerową, aby otrzymać prze-
dział, w którym funkcja może osiągać wartość zerową. Gdy w ten sam sposób obliczymy
płaszczyzny ograniczające dla drugiej funkcji i przetniemy je ze sobą , wtedy na płasz-
czyźnie (x,y) powstanie równoległobok (nazwijmy go A,B,C,D)
Rysunek 18:
Jeżeli na trójkątnej dziedzinie będą znajdowały się pierwiastki - muszą znajdować się w
równoległoboku A,B,C,D.
Najpierw należy obliczyć płaszczyznę przechodzącą przez trzy wierzchołki. Jej równanie
będzie postaci: f(x, y) = ax+by+c. Wartość f(x, y) dla tej płaszczyzny w punkcie A czyli
(0,0) będzie wynosiła a00 (będzie to wyraz wolny c); aby obliczyć współczynniki przy x
oraz y należy zauważyć, że dla punktu (0,1) funkcja ma mieć wartość a0n a dla punktu
(1,0) - an0 tzn. przy wzroście x o 1 f(x, y) wzrasta o a0n − a00 (nazwiemy to dx), a dla
37
y: an0−a00 (dy) . Należy teraz policzyć punkty kontrolne , które leżą najwyżej i najniżej
względem znalezionej płaszczyzny. Od każdego punktu kontrolnego odejmujemy wartość,
którą f(x, y) przyjmuje na danych punktach kontrolnych, przykładowo dla stopnia=2
będą to punkty (0,1/2), (1/2,0) i (1/2,1/2) Znajdujemy maksymalne i minimalne wartości
(zmax i zmin) na podstawie których możemy znaleźć płaszczyzny równoległe. Następnym
krokiem będzie policzenie linii przecinania się tych płaszczyzn z płaszczyzną zerową. Dla
każdej funkcji będą to linie równoległe. ogólny wzór tych linii y = kx+ p
k można wyliczyć ze wzoru: k = −dx/dy (jedno k dla pary równoległych linii) przesunię-
cia: dla górnej: p = (−a00 − zmax)/dy dla dolnej: p = (−a00 − zmin)/dy
Gdy już mamy dwie pary równoległych linii, należy teraz policzyć równoległobok powstały
z ich przecięcia.
punkt (x,y) w którym się przecinają: płaszczyzna dolna dla pierwszej funkcji z dolną
dla drugiej (pd1 z pd2):
x := (pd2− pd1)/(k1− k2); y := k1 · x+ pd1
pd1 z pg2:
x := (pg2− pd1)/(k1− k2); y := k1 · x+ pd1
pg1 z pd2:
x := (pd2− pg1)/(k1− k2); y := k1 · x+ pg1
pg1 z pg2:
x := (pg2− pg1)/(k1− k2); y := k1 · x+ pg1
Gdy mamy równoległobok należy znaleźć trójkąt ograniczający. ( Jest to znacznie trud-
niejsze, niż znalezienie boxa ograniczającego ). Szukam trójkąta prostokątnego o równych
bokach, który miałby najmniejsze rozmiary a zawierałby równoległobok. Aby zminima-
lizować wielkość szukanego trójkąta próbuję dopasować trójkąt zorientowany zgodnie z
trójkątem bazowym oraz trójkąt zorientowany przeciwnie.
Dla trójkąta zorientowanego zgodnie: krawędzie ograniczające trójkąt tworzące kąt pro-
sty były by tak dobrane, aby krawędź dolna przechodziła przez punkt dla którego współ-
rzędna y jest najmniejsza, a krawędź pionowa przechodziła przez punkt o minimalnej
współrzędnej x. Trzecia krawędź miałaby nachylenie k=-1 i przechodziłaby przez punkt
38
dla którego x+y byłoby największe
przykładowo: jest dany wielokąt o bokach: (2,3),(3,2),(7,4) i (6,5) trójkąt ograniczający
będzie miał kąt prosty w punkcie (2,2) aby obliczyć wielkość boku trójkąta należy wyli-
czyć sumę współrzędnych x+y dla wszystkich boków równoległoboku oraz punktu (2,2) i
znaleźć punkt, dla którego suma ta będzie największa - tutaj będą to punkty (7,4) i (6,5)
dla których suma wynosi 11. Stąd rozmiar trójkąta będzie równy 11-4=7
Rysunek 19:
Dopasowanie tego samego równoległoboku do trójkąta zorientowanego przeciwnie: kra-
wędź dolna przechodzi przez punkt dla którego współrzędna y jest najmniejsza, krawędź
pionowa przez punkt o współrzędnej x maksymalnej. Trzecia krawędź ograniczająca bę-
dzie miała nachylenie k=1 i przechodziła będzie przez punkt dla którego y-x jest najwięk-
sze - punkt (2,3) dla którego y-x wynosi 1.Kąt prosty trójkąta będzie w punkcie (7,2) o
wartości y-x równej (-5) Rozmiar boku trójkąta będzie wynosił 1-(-5)=6.Widać stąd, że
to dopasowanie jest lepsze. Weźmy przykład, dla którego liczony był podpodział:
pierwsza funkcja:1
−1/4 0
−1 −1/4 1druga funkcja:
39
1
1/2 1/2
0 0 −1Równoległobok dla tych funkcji ma współrzędne (1/2,0),(3/4,1/4),(1/2,1/2) i (1/4,1/4)
trójkąt ograniczający ma wielkość boku równą 3/4
Dla trójkąta powstałego z poprzedniego przez podpodział:
pierwsza funkcja:−1
−0.625 −0.25
−0.125 0.125 0.5druga funkcja:
0
0 0.25
−0.25 0 0.25równoległobok ma współrzędne:
(0.447,0.105), (0.263,-0.026), (0.421,0.157) i (0.236,0.026) a k=0.263
Rysunek 20:
Widać stąd, że k ma znacznie mniejszą wartość niż w poprzednim przykładzie. Ogólnie,
przy przybliżaniu się do pierwiastka wartość k maleje Gdy mamy wyliczony trójkąt ogra-
niczający należy znaleźć siatkę punktów kontrolnych. Zrobić to można przez przekształce-
40
nie afiniczne funkcji do innej dziedziny gdy mamy podaną funkcję w bazie wielomianowej
f(x, y) należy wyliczyć funkcję f(ax+ b, c.x+d) gdzie a = k dla trójkąta zorientowanego
zgodnie i −k dla zorientowanego przeciwnie, c = k
za b i d należy podstawić współrzędne wierzchołka (z kątem prostym) trójkąta. gdy x
jest wektorem współczynników funkcji w bazie wielomianowej wtedy wektor współczyn-
ników po przekształceniu x’ należy wyliczyć ze wzoru : x’=Ax gdzie A jest macierzą
przekształcenia
Dla stopnia 2 mamy macierz:∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 b d b2 bd d2
0 a 0 2ab ad 0
0 0 c 0 bc 2cd
0 0 0 a2 0 0
0 0 0 0 ac 0
0 0 0 0 0 c2
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣Dla stopnia 3:∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣
1 b d b2 bd d2 b3 b2d bd2 d3
0 a 0 2ab ad 0 3ab2 2abd ad2 0
0 0 c 0 bc 2cd 0 b2c 2bcd 3cd2
0 0 0 a2 0 0 3ab a2d 0 0
0 0 0 0 ac 0 0 2abc 2acd 0
0 0 0 0 0 c2 0 0 bc2 3c2d
0 0 0 0 0 0 a3 0 0 0
0 0 0 0 0 0 0 a2c 0 0
0 0 0 0 0 0 0 0 ac2 0
0 0 0 0 0 0 0 0 0 c3
∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣(zawiera macierz stopnia niższego)
3.2.3 Metoda Newtona
Metoda Newtona w przypadku jednowymiarowym:
bierzemy pewien punkt startowy x0, następnie liczymy punkt następny wykorzystując
41
przybliżenie danej funkcji funkcją liniową - punkt x1 będzie znajdował się w miejscu
przecięcia się prostej stycznej do funkcji w miejscu x0 z prostą y = 0. Następnie na
podstawie x1 wyliczamy x2 itd. Powstały w ten sposób ciąg punktów bardzo szybko
(zbieżność kwadratowa ) dąży do miejsca w którym funkcja osiąga wartość zero.
Rysunek 21:
d = x0 − x1
f ′(x0) = f(x0)/d
stąd
f(x0) = f ′(x0) · did = f(x0)/f ′(x0)
x1 = x0 − d
x1 = x0 − f(x0)/f ′(x0)
ogólnie dla następnych punktów:
xk+1 = xk − fxk/f ′xk
W przypadku większej liczby wymiarów postępujemy analogicznie; główną różnica jest
to że zamiast na prostych liczbach działamy na wektorach; zamiast pochodnej liczymy
Jacobian,
F (x∗ + d) = F (x∗) + dFdx (x∗) · d
Metoda Newtona rzędu 2:∣∣∣∣∣∣∣∣F1(x)
F1(x)
∣∣∣∣∣∣∣∣+∣∣∣∣∣∣∣∣δF1δx1
δF1δx2
δF2δx1
δF2δx2
∣∣∣∣∣∣∣∣ = 0
42
F1(X) + δF1δx1
d1 + δF1δx2
d2 = 0
F2(X) + δF2δx1
d1 + δF2δx2
d2 = 0czyli:δF1δx1
d1 + δF1δx2
d2 = −F1(X)δF2δx1
d1 + δF2δx2
d2 = −F2(X)Aby rozwiązać ten układ równań należy policzyć wyznaczniki:
D = δF1δx1· δF2δx2− δF2
δx1· δF1δx2
D1 = −F1 ·δF2δx2
+ F2 ·δF1δx2
D1 = −F1 ·δF1δx1
+ F2 ·δF2δx1
jeżeli D 6= 0 to d1 = D1/D d2 = D2/D
Gdy chcemy wykorzystać metodę Newtona do rozwiązania układu równań musimy znać
pochodne tej funkcji. W przypadku gdy funkcje wyrażone są w bazie Bernsteina opłaca
się raz przetransformować je na bazę wielomianową , wyliczyć pochodne, które potem
można stosować w kolejnych krokach metody Newtona.
Gdy chcemy wykorzystać szybko zbieżną metodę Newtona do dokładnego oszacowania
pierwiastka pojawiają się problemy:
- w odróżnieniu od metody podpodziału metoda Newtona nie zawsze jest zbieżna do pier-
wiastka; poradzić sobie z tym problemem można w ten sposób, że określamy maksymalną
liczbę kroków algorytmu - metoda Newtona albo bardzo szybko znajduje pierwiastek,
albo nie znajduje go w ogóle; dodatkowo, aby zwiększyć szansę zbieżności, szukamy pier-
wiastków na małej dziedzinie; wykorzystujemy fakt, że jeżeli pochodna funkcji w całej
dziedzinie niewiele się różni, wtedy występuje szybka zbieżność do pierwiastka, nato-
miast gdy na dziedzinie funkcja wykazuje duże pofalowanie, wtedy metoda Newtona jest
rozbieżna - już w pierwszym kroku może wyjść poza dziedzinę
- jeżeli metoda Newtona w dziedzinie nie znajdzie żadnego pierwiastka - nie możemy
zakładać, ze tam nie ma pierwiastków, tylko musimy nadal dzielić
- może się zdarzyć, że metoda Newtona znajdzie pierwiastek, który jednak nie leży we-
wnątrz dziedziny (mimo, że punkt startowy został wybrany z dziedziny); w tym przy-
43
padku również nie możemy zakładać, że w naszym trójkącie nie ma pierwiastków
- kiedy metoda Newtona znajdzie pierwiastek wewnątrz trójkątnej dziedziny (nazwijmy
go P), mimo tego, że trójkąt ma małą średnicę, nie możemy zakładać, że jest tylko ten
jeden pierwiastek; aby znaleźć inne pierwiastki ( ewentualnie wykluczyć ich istnienie )
należy podzielić trójkąt tym razem nie na krawędzi lecz w miejscu, gdzie został znaleziony
pierwiastek ( aby wykorzystać informację, jaką dała metoda Newtona );
Rysunek 22:
Po podziale:
44
Rysunek 23:
Należy zauważyć, że gdy zastosujemy dowolny test na badanie istnienia pierwiastków
wewnątrz trójkątów A,P,C A,P,B czy B,P,C zawsze otrzymamy wynik, że trójkąty te
zawierają pierwiastek - ponieważ zawierają punkt P mający wartość (0,0); interesuje nas
inny problem: czy punkt P jest jedynym pierwiastkiem w danym trójkącie; możemy posłu-
żyć się stwierdzeniem: jeżeli wszystkie punkty kontrolne, mają wartości większe od zera,
oprócz jednego wierzchołka dla którego punkt kontrolny ma wartość zero, wtedy funkcja
na trójkącie przybiera wartości dodatnie we wszystkich punktach prócz tego wierzchołka;
aby udowodnić to stwierdzenie posłużmy się metodą podpodziału do znalezienia warto-
ści dowolnego punktu o współrzędnych barycentrycznych (r,s,t) różnego od P. Już dla
pierwszej warstwy utworzonej na podstawie trójkąta wszystkie punkty kontrolne będą
dodatnie; jest to spowodowane tym, że powstają one przez kombinację punktów kontrol-
nych trójkąta ze współczynnikami r,s,t >= 0 pozostałe warstwy oraz szukany punkt będą
również dodatnie - co dowodzi stwierdzenie. Podobnie, jeżeli wszystkie punkty, oprócz P
45
mają wartości ujemne to funkcja na wszystkich punktach prócz P przyjmuje wartości
ujemne. Do testowania trójkątów A,P,C A,P,B i B,P,C możemy posługiwać się wcze-
śniejszymi metodami (m.in. testem lambda) z tą różnicą, że z testu wyrzucamy punkt
P.
Przykład zastosowania metody Newtona do obliczenia punktów, w którym przecinają się
2 koła.
Rysunek 24:
S(p, q)S1 = (1/4, 1/4)S2 = (1/2, 1/4)
(x− p)2 + (y − q)2 = r2
1 koło: (x− 1/4)2 + (y − 1/4)2 = (1/4)2 → x2 − x/2 + y2 − y/2 + 1/16 = 0
2 koło: (x− 1/2)2 + (y − 1/4)2 = (1/4)2 → x2 − x+ y2 − y/2 + 1/4 = 0
Obliczamy pochodne:df1dx = 2x− 1/2; df1dy = 2y − 1/2df2dx = 2x− 1; df2dy = 2y − 1/2
Gdy punktem startowym jest (1/3,1/3) metoda Newtona zbiega do punktu
(0.375;0.46650635095 )
Aby zastosować metodę Newtona dla funkcji z przykładu dla podpodziału należy prze-
transformować ją do bazy wielomianowej; otrzymamy funkcje:
46
f1 = 0.5x2 + 0.5y2 − xy + 1.5x+ 1.5y − 1
f2 = y − x2
df1dx = x− y + 1.5; df1dy = y − x+ 1.5df2dx = −2x; df2dy = 1
Dla punktu startowego metoda Newtona znajduje pierwiastek w:
(0.44673309002;0.19957045372)
Za pomocą metody Newtona możemy tylko stwierdzić istnienie pierwiastka na dziedzinie,
nie możemy natomiast wykluczyć jego istnienia, ani stwierdzić ich ilości.
Do wykluczania dziedziny z rozważań podobnie jak w poprzednich przypadkach używamy
własności płatków Beziera - m.in. testu lambda.
Dzielimy trójkąt w miejscu znalezionego pierwiastka i dla podtrójkątów stosujemy testy
na obecność pierwiastka.
Powstaje problem: przy wybieraniu punktu podziału wewnątrz trójkąta powstałe trójkąty
są coraz cieńsze. Wprowadziłem kryterium: jest to stosunek pola trójkąta do jego średnicy.
Liczba ta nie zależy od skali trójkąta ani obrotu. W praktyce zamiast liczenia pola stosuję
wyliczanie wyznacznika (ponieważ pole=1/2*abs(Det))
Nie muszę wyliczać wyznacznika, ponieważ trójkąty są zawsze tak samo zorientowane.
Przykładowo dla trójkąta prostokątnego równoramiennego Det/średnica =1/2
Płaskie trójkąty dzielę na 2 w środku najdłuższej krawędzi zamiast szukać pierwiastków
ponieważ :
1. dla płaskich trójkątów szybko narastają błędy zaokrągleń
2. pierwiastek może znajdować się daleko od środka , natomiast bliżej może być pier-
wiastek nie należący do dziedziny
Ustalam pewne K dla którego : jeżeli Det/średnica>=K wtedy szukam pierwiastków,
w przeciwnym razie dzielę na 2. K nie może być zbyt duże ponieważ metoda Newtona
zamienia się w metodę podpodziału; dla zbyt małego powstają zbyt płaskie trójkąty.
Testując czas wykonania ustaliłem K na 0.28
47
4 Testy i podsumowanie
Porównuję metodę podpodziału opisaną wcześniej z algorytmami wykorzystującymi me-
todę płaszczyzn ograniczających i metodę Newtona.
4.1 Metoda płaszczyzn ograniczających
1. Liczymy równoległobok, w którym muszą znajdować się pierwiastki.
2. Jeżeli równoległobok będzie znajdował się poza trójkątem - oznacza to, że nie ma
pierwiastka w dziedzinie - usuwamy trójkąt ze zbioru trójkątów podejrzanych o
zawieranie pierwiastka .
3. Opisujemy równoległobok trójkątem;
4. Jeżeli trójkąt opisujący nie jest dostatecznie mały (np. ma średnicę większą niż
połowa trójkąta bazowego) stosujemy metodę podpodziału i dzielimy trójkąt na
cztery. Uwaga - gdyby nie stosować metody podpodziału, nie było by zbieżności w
przypadku, gdy w trójkącie znajdowało się kilka pierwiastków
5. Jeżeli trójkąt opisujący jest dostatecznie mały - zmieniamy dziedzinę funkcji.
4.2 Metoda Newtona
1. Sprawdzamy,czy trójkąt nie jest zbyt płaski
2. Jeżeli jest - dzielimy trójkąt na 2 wzdłuż najdłuższej krawędzi
3. Jeżeli nie jest - ustalamy punkt dla r=s=t=1/3
4. Stosując metodę Newtona liczymy pierwiastek
5. Jeżeli metoda Newtona nie jest zbieżna - dzielimy trójkąt na 2
6. Jeżeli pierwiastek znajduje się poza dziedziną dzielimy na 2, w przeciwnym przy-
padku dzielimy na 3
Test przeprowadziłem na komputerze wyposażonym w procesor Cyrix P166 (133 MHz).Program
został napisany w języku Pascal. Testy przeprowadziłem w środowisku DOS. Czas zmie-
rzyłem przy użyciu zegara systemowego (dokładność ok. 18 tyknięć na sekundę) dla wielu
48
układów funkcji (rzędu 9 tys.) a następnie ogólny czas podzieliłem przez ilość układów
uzyskując średni czas obliczania układu funkcji.
4.3 Generowanie danych doświadczalnych
Generuję funkcję stopnia 2. Funkcja taka zależy od 6 współczynników przy: 1,x,y,x2,xy,y2
Współczynniki dobieram losowo z przedziału [-2,2] Mam funkcję GenRoot zależną od
parametru seed który służy do początkowego ustawienia generatora liczb pseudolosowych.
(dodatkowo na początku funkcji wywołuję random, w przeciwnym razie dla seed będącym
małym w porównaniu z zakresem longinta (2^32) random zwraca liczbę bardzo bliską 0.5
co psułoby losowośc doświadczenia) na 100000 funkcji:
Liczba pierwiastków Liczba układów funkcji
0 93202
1 6558
2 237
3 3
Widać że zdecydowana większość funkcji na trójkącie jednostkowym nie posiada żadnych
pierwiastków. Aby zwiększyć ilość funkcji mających pierwiastki na dziedzinie wprowa-
dzam poprawki do funkcji GenRoot; losowo ustalam pierwiastek na trójkącie w punkcie
(rootX,rootY) gdzie:
rootX:=random;
rootY:=random*(1-rootX);
Dodatkowo współczynnik przy wyrazie wolnym nie jest losowany, ale obliczany dla danego
(rootX,rootY) Liczba pierwiastków Liczba układów funkcji
49
Liczba pierwiastków Liczba układów funkcji
0 0
1 82106
2 17352
3 525
4 17
4.4 Testowanie czasu wykonania
Testuję oddzielnie dla układów o różnej liczbie pierwiastków na dziedzinie:
Dla 0 pierwiastków
W próbie było 9346 układów
W przeliczeniu na jedno wywołanie:
Metoda podpodziału 0.370 ms
Metoda płaszczyzn ograniczających 0.258 ms
Metoda Newtona 0.317 ms
Dopuszczalny błąd 0.006 ms
Dla układu mającego 1 pierwiastek w dziedzinie:
W próbie było 8226 układów
Metoda podpodziału 9.669 ms
Metoda płaszczyzn ograniczających 1.789 ms
Metoda Newtona 0.787 ms
Dopuszczalny błąd 0.006 ms
Dla układu mającego 2 pierwiastki w dziedzinie:
W próbie było 8661 układów
Metoda podpodziału
50
Metoda podpodziału 19.617 ms
Metoda płaszczyzn ograniczających 4.890 ms
Metoda Newtona 1.592 ms
Dopuszczalny błąd 0.006 ms
Dla układu mającego 3 i 4 pierwiastki w dziedzinie:
W próbie było 258 układów
test wykonałem 10 razy aby zwiększyć dokładność
Metoda podpodziału 30.44 ms
Metoda płaszczyzn ograniczających 9.15 ms
Metoda Newtona 3.11 ms
Dopuszczalny błąd 0.02 ms
4.5 Podsumowanie
Najszybszą metodą okazała się metoda Newtona. W metodzie podpodziału każdy krok
zmniejsza dwukrotnie obszar podejrzany o istnienie pierwiastków. Natomiast zarówno w
metodzie płaszczyzn ograniczających jak i metodzie Newtona występuje zbieżność kwa-
dratowa w pobliżu pierwiastka, ale każdy krok metody Newtona trwa krócej.
Dodatkową zaletą metody Newtona jest możliwość jej rozszerzania na więcej wymiarów.
Przykładowo dla n=3: mamy jednostkowy simpleks o wierzchołkach: (0,0,0),(0,0,1),(0,1,0),(1,0,0)
51
Rysunek 25:
Punkt startowy wybieramy w (1/4,1/4,1/4) stosując metodą Newtona dla trzech wymia-
rów liczymy pierwiastek. W przypadku znalezienia pierwiastka - simpleks dzielimy na
cztery części w tym punkcie i testujemy je na obecność pierwiastka; w przypadku, gdy
nie został znaleziony pierwiastek - dzielimy w środku najdłuższej krawędzi.
52
5 Inne metody
Sherbrooke i Patrikalakis prezentują dwa algorytmy [15] na obliczanie wszystkich pier-
wiastków układu nieliniowych wielomianowych równań n - zmiennych leżących w n -
wymiarowym boksie polegające na reprezentacji w wielomianowych bazach Bernsteina i
podpodziale .
Ażeby izolować wszystkie pierwiastki w danej dziedzinie, obie metody używają różnych
schematów do konstrukcji ograniczających boksów . Pierwsza metoda rzutuje wielościan
na zbiór równorzędnych płaszczyzn, druga używa liniowej optymalizacji.
Badana jest również lokalna zbieżność obu metod i dowód że pierwsza jest kwadrato-
wo zbieżna dla n=1 i liniowo zbieżna dla n>1; druga zaś jest kwadratowo zbieżna dla
wszystkich n.
Przypuśćmy, że mamy układ n funkcji n zmiennych f1, f2, ..fn. Pierwiastków szukamy w
n-wymiarowym boksie S = [a1, b1]x[a2, b2]x...x[an, bn] Mamy znaleźć wszystkie punkty
u = (u1, u2, ..un) należące do S takie , że f1(u) = f2(u) = ... = fn(u) = 0
Przez wykorzystanie transformacji afinicznej [4] ui = ai + xi(bi − ai) dla każdego i od 1
do n uprościmy problem do szukania x należącego do [0, 1]n takiego ,że f1(x) = f2(x) =
.. = fn(x) = 0
Ponieważ fi są wielomianami, wykorzystując zmianę baz można przedstawić je w bazach
Bernsteina. Można wykorzystać własność, że płatek Beziera zawiera się w pokryciu wy-
pukłym swoim punktów kontrolnych. Pierwiastki muszą należeć do przecięcia pokrycia
wypukłego z płaszczyzną zerową.
53
Rysunek 26:
Ogólny algorytm szukania pierwiastków:
1. Jako początkową dziedzinę bierzemy [0, 1]n
2. Dla każdej funkcji fi wyznaczamy pokrycie wypukłe jej punktów kontrolnych
3. Szukamy przecięć pokryć wypukłych z płaszczyzną zerową jeżeli obszar przecięcia
ma średnicę mniejszą niż pewne dołączamy go do zbioru znalezionych pierwiastków.
4. Jeżeli średnica obszaru nie jest dostatecznie mała: znajdujemy najmniejszy boks
S = [a1, b1]x[a2, b2]x...x[an, bn] zawierający obszar przecięcia
5. Za pomocą transformacji afinicznej ui = ai + xi(bi − ai) przekształcamy funkcje i
dalej działamy na [0, 1]n zamiast na S
6. Skaczemy do punktu 2.
Pozostaje jeszcze problem obliczenia pokryć wypukłych i ich przecięć z płaszczyzną zero-
wą. Zamiast dokładnego wyznaczenia tych obszarów można szukać n-wymiarowych bok-
sów, w których będą się one znajdować. Do znalezienia tych boksów można wykorzystać
poniżej opisane algorytmy PP i LP
5.1 Algorytm PP - przecięcia rzutów wielościanów
(z ang. the projected-polyhedron intersection algorithm)
54
Ta metoda wyznacza prostokąt ograniczający przez rozwiązanie n dwuwymiarowych za-
dań w każdej iteracji zamiast jednego (n+1)wymiarowego. Filozofią tego podejścia jest
wyznaczenie każdego z n-ograniczeń boksu niezależnie, poprzez rzutowanie punktów kon-
trolnych na rózne płaszczyzny. Przyjmijmy, że chcemy znaleźć przedział [aj , bj ] boksu
ograniczającego. Definiujemy funkcję pj: Rn+1− > R2 poprzez:
πj(x) = (πj(x), πn+1(x)) gdzie pij(x) jest rzutem x na płaszczyznę j-tą czyli πj(x) = xj
Używająć πj będziemy rzutować punkty kontrolne każdej z funkcji Fk na płaszczyznę
kartezjańską (nazwiemy ją dla uproszczenia płaszczyzną (x,y)) Będziemy generować dwu-
wymiarowe pokrycia wypukłe tych rzutowanych punktów i przecinać je ze sobą i z osią
X. Oznaczmy przez Bj część wspólną tych przecięć. Wtedy zbiór podejrzanych punktów
jest podzbiorem boksu B = B1xB2x...xBn.
5.2 Algorytm LP - programowania liniowego
Metoda ta opiera się na poszukiwaniu minimum i maksimum funkcji liniowej dla zbioru
punktów podejrzanych. Problem znalezienia B = [a1, b1]x[a2, b2]x...x[an, bn] dzielimy na
2*n niezależnych podproblemów obliczenia wszystkich ai oraz bi. Jeżeli przez A oznaczy-
my obszar przecinania się pokrycia wypukłego z płaszczyzną zerową, czyli obszar szukany
- możemy sobie zadać dwa pytania:
- jeżeli weźmiemy pod uwagę współrzędną i, który punkt ma najmniejszą wartość
- który ma największą wartość
czyli ai = minxi bi = maxxi x należy do A, i=1..n
Aby wyznaczyć ai oraz bi należy zapisać układ równań, który jednoznacznie określa A.
Następnie wykorzystując algorytm optymalizacji można obliczyć minimum i maksimum
wartości xi, które mieszczą się w danych ograniczeniach. Dokładny opis algorytmów wraz
z wyliczeniem ich wydajności można znaleźć w [15] Inną metodą która można stosować
do podpodziału w przypadku większej liczby wymiarów niż dwa jest metoda opisana
w artykule Goodmana i Petersa [7] gdzie podają algorytm na podział simpleksu oraz
warunki na wypukłość siatek Beziera
55
Literatura
[1] Barry P.J. Goldman Ronald N. De Casteljau - type subdivision is peculiar to Bezier
curves.Computer Aided Design 3/1988 s.114-116
[2] Boehm Wolfgang. An Affine representatin of de Casteljau’s and de Boor’s rational
algorithms. Computer Aided Geometric Design 3-4/1993 s.175-180
[3] Boehm Wolfgang Farin Gerald. Letter to editor. Computer Aided Design 5/1983
s.261
[4] Farin Gerald -Curves and Surfaces for Computer Aided Geometric Design - A Prac-
tical Guide. Academic Press,New York,2nd edn.1990
[5] Garcia C.B Zangwill W.I Global continuation methods for finding all solutions to
polynomial systems of equations in n variables. w Fiacco A.V and Kortanek K.O
eds. Extremal methods and systems analysis. Springer,New York 1980 s.481-497
[6] Goldman Ronald N. Subdivision algorithms for Bezier triangles. Computer Aided
Design 3/1983 s.159-166
[7] Goodman Tim N.T. Peters Jorg Bezier nets, convexity and subdivision on higher-
dimensional simplices. Computer Aided Geometric Design 1/1995 s.53-65
[8] Jankowski Michal. Elementy grafiki komputerowej.Wydawnictwo Naukowo - Tech-
niczne Warszawa 1990.
[9] Lodha Suresh Goldman Ronald N. Change of basis algorithms for surfaces in
CAGD.Computer Aided Geometric Design 8/1995 s.801-824
[10] Nishita T. Sederberg T.W Kakimoto M. Ray tracing trimmed rational surface pat-
ches. ACM Comput. Graphics 24(4) 1990 337-345
[11] Peng Q.S. An algorithm for finding the intersection lines between two B-spline sur-
faces.Computer Aided Design 4/1984 s.191-196
56
[12] Piegl L. Recursive algorithms for the representation of parametric curves and surfa-
ces.Computer Aided Design 5/1985 s.225-229
[13] Sederberg T.W Algorithms for algebraic curve intersection. Computer Aided Design
21 (9) 1989 s.547-554
[14] Sederberg T.W Nishita T. Geometric Hermite approximation of surface patch inter-
section curves. Computer Aided Geometric Design 1991, 97-114
[15] Sherbrooke Evan C. Patrikalakis Nicholas M. Computation of the solutions of non-
linear polynomial systems. Computer Aided Geometric Design 5/1993 s.379-405
[16] Tseng Yuan-Jye Sanjay. Determining feasible tool - approach directions for machining
Bezier curves and surfaces. Computer Aided Design 5/1991 s.367-379
[17] Zheng Jin-Jin. The convexity of parametric Bezier triangular patches of degree 2.
Computer Aided Geometric Design 6/1993 s.521-530
[18] Zhou Chang-Zheng. On the convexity of parametric Bezier triangular surfa-
ces.Computer Aided Geometric Design 7/1990 s.459-463
57