Laboratorium grafiki i multimediów

Transkrypt

Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Laboratorium grafiki i multimediów
Krzywe
Michał Matuszak
[email protected]
08/09-03-2010
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Literatura
The NURBS Book, Les A. Piegl, Wayne Tiller,
Springer-Verlag, 1995
Curves and Surfaces for Computer Graphics, D. Salomon
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Reprezentacja krzywych
Postać uwikłana:
f (x, y ) = 0,
np. równanie okręgu: f (x, y ) = x 2 + y 2 − 1 = 0.
Postać parametryczna:
C (u) = (x(u), y (u)), a ¬ u ¬ b,
Przedział [a, b] może być dowolny. Jednak zwykle jest
znormalizowany do przedziału [0, 1].
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Reprezentacja krzywych
Postać uwikłana:
f (x, y ) = 0,
np. równanie okręgu: f (x, y ) = x 2 + y 2 − 1 = 0.
Postać parametryczna:
C (u) = (x(u), y (u)), a ¬ u ¬ b,
Przedział [a, b] może być dowolny. Jednak zwykle jest
znormalizowany do przedziału [0, 1].
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Postać parametryczna - przykład
Okrąg w pierwszej ćwiartce można opisać za pomocą funkcji:
(
x(u) = cos(u)
y (u) = sin(u),
gdzie 0 ¬ u ¬ π2 .
Postać parametryczna nie musi być jednoznaczna.
Przyjmijmy t = tan( u2 ). Wówczas:
(
x(t) =
y (t) =
1−t 2
1+t 2
2t
,
1+t 2
,gdzie 0 ¬ t ¬ 1.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Postać parametryczna - przykład
Okrąg w pierwszej ćwiartce można opisać za pomocą funkcji:
(
x(u) = cos(u)
y (u) = sin(u),
gdzie 0 ¬ u ¬ π2 .
Postać parametryczna nie musi być jednoznaczna.
Przyjmijmy t = tan( u2 ). Wówczas:
(
x(t) =
y (t) =
1−t 2
1+t 2
2t
,
1+t 2
,gdzie 0 ¬ t ¬ 1.
Będziemy używać postaci parametrycznej.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Postać parametryczna - przykład
Okrąg w pierwszej ćwiartce można opisać za pomocą funkcji:
(
x(u) = cos(u)
y (u) = sin(u),
gdzie 0 ¬ u ¬ π2 .
Postać parametryczna nie musi być jednoznaczna.
Przyjmijmy t = tan( u2 ). Wówczas:
(
x(t) =
y (t) =
1−t 2
1+t 2
2t
,
1+t 2
,gdzie 0 ¬ t ¬ 1.
Będziemy używać postaci parametrycznej.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Literatura
Reprezentacja
Szukamy klas funkcji które:
Reprezentują wszystkie potrzebne krzywe.
Mogą być łatwo, efektywnie i dokładnie obliczane przez
komputer. W szczególności:
Obliczanie punktów i pochodnych jest szybkie.
Niewrażliwość na błędy numeryczne.
Potrzebują mało pamięci.
Są proste i zbadane przez matematyków.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Własności
Baza potęgowa
Schemat Hornera
Wielomiany
Spełniają dwa ostatnie punkty z listy.
Nie reprezentują wszystkich krzywych.
Funkcje wielomianowe przedstawimy korzystając z:
1
2
bazy potęgowej
metody Béziera
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Własności
Baza potęgowa
Schemat Hornera
Krzywa n-tego stopnia w bazie potęgowej:
C (u) = (x(u), y (u), z(u)) =
n
X
ai u i , 0 ¬ u ¬ 1,
i =0
gdzie ai = (xi , yi , zi ) są wektorami:
x(u) =
n
X
xi u i y (u) =
i =0
Michał Matuszak [email protected]
n
X
i =0
yi u i z(u) =
n
X
zi u i
i =0
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Własności
Baza potęgowa
Schemat Hornera
Schemat Hornera
Różniczkując C (u), otrzymujemy:
ai =
C (i ) (u)ku=0
i!
Mając dany punkt u0 . Najlepiej obliczyć C (u0 ) korzystając ze
schematu Hornera.
deg = 1: C (u0 ) = a1 u0 + a0
deg = 2: C (u0 ) = (a2 u0 + a1 )u0 + a0
..
.
deg = n: C (u0 ) = ((· · · (an u0 + an−1 )u0 + an−2 )u0 + · · · + a0
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Własności
Baza potęgowa
Schemat Hornera
Wady
Nienaturalne dla modelowania kształtów. Współczynniki {ai }
niosą niewiele geometrycznych informacji.
Trudno zdefiniować położenie obu końców prostej.
Algorytmy dla bazy potęgowej są bardziej ’algebraiczne’ niż
’geometryczne’.
Nienajlepsze numerycznie.
Schemat Hornera jest podatny na błedy numeryczne, gdy
współczynniki różnią sie znacznie w rzędach wielkości.
Metoda Béziera pozwoliła wyeliminować powyższe niedogodności.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Krzywe Béziera
Suma ważona punktów. (wagi barycentryczne)
Oznaczmy:
Punkty kontrolne: P0 , P1 , . . . , Pn
Wagi: Bi
Suma ważona wyraża się wzorem:
C (u) =
n
X
Pi Bi , 0 ¬ u ¬ 1.
i =0
Bi powinno zależeć od u.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Rysunek: Źródło: Curves and Surfaces for Computer Graphics
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Definicja
Krzywa Béziera n-tego stopnia:
C (u) =
n
X
Bn,i (u)Pi , 0 ¬ u ¬ 1
i =0
gdzie {Bn,i (u)} jest wielomian Bernsteina:
n
Bn,i (u) = i u i (1 − u)n−i
Współczynniki {Pi } nazywamy punktami kontrolnymi.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
n=1
C (u) = (1 − u)P0 + uP1
Rysunek: The NURBS Book
Otrzymaliśmy odcinek od P0 do P1 .
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
n=2
C (u) = (1 − u)2 P0 + 2u(1 − u)P1 + u 2 P2
Rysunek: Źródło: The NURBS Book
Powstał łuk paraboli o początku w P0 i końcu w P1 .
Używane w czcionkach TrueType.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
n=3
C (u) = (1 − u)3 P0 + 3u(1 − u)2 P1 + 3u 2 (1 − u)P2 + u 3 P3
Rysunek: Źródło: Curves and Surfaces for Computer Graphics
Używane w PostScript, Asymptote i Metafont.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Własności
Krzywa przechodzi przez początkowy i końcowy punkt.
Styczną do krzywej w punkcie początkowym jest prosta
P1 − P0 . Analogicznie na końcu krzywej.
Powstała krzywa znajduje sie wewnątrz otoczki wypukłej
stworzonej na punktach kontrolnych
Każdą krzywą można podzielić na dwie krzywe. Powstałe
krzywe będą także krzywymi Béziera.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Definicja
Wymierna krzywa Béziera jest rozszerzeniem oryginalnej krzywej
Béziera:
Pn
wi Pi Bn,i (t)
P(t) = Pi =0
n
j=0 wj Bn,j (t)
P(t) =
=
n
X
i =0
n
X
Pi
"
wi Bn,i (t)
Pn
j=0 wj Bn,j (t)
#
Pi Rn,i (t),
i =0
Nowa funkcja wag Rn,i (t) (iloraz wielomianów) zależy także od
wag wi , które są dodatkowym parametrem kontrolującym kształt
krzywej.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Wagi wi powinny być nieujemne.
Wymierna krzywa Béziera wydaje się być skomplikowana.
Zalety:
Niezmiennicza na rzutowanie. (Wystarczy zrzutować punkty
kontrolne)
Pozwala reprezentować krzywe stożkowe.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wielomianowa krzywa Béziera
Wymierna krzywa Béziera
Okrąg
Dane są 3 punkty P0 = (1, 0), P1 = (1, 1) i P2 = (0, 1).
Krzywa Béziera określona przez te punkty ma postać:
P(t) = (1 − t)2 P0 + 2t(1 − t)P1 + t 2 P2 = (1 − t 2 , 2t(1 − t)).
Wymierna krzywa Béziera z wagami w0 = w1 = 1, w2 = 2
prowadzi do wyrażenia:
P(t) =
1 − t2
2t
(1 − t)2 P0 + 2t(1 − t)P1 + 2t 2 P2
=(
,
),
2
2
(1 − t) + 2t(1 − t) + 2t
1 + t2 1 + t2
które opisuje okrąg.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Wprowadzenie
Wady pojedyńczego wielomianu/człona wymiernego:
Stopień krzywej zależy od ilości punktów kontrolnych.
Wymagana krzywa wysokiego stopnia, aby spełnić dużą liczbę
ograniczeń.
Potrzeba krzywej stopnia (n − 1), by krzywa przeszłą przez n
punktów.
Krzywe wysokich stopni są nieefektywne oraz niestabilne
numerycznie.
Oferują tylko globalną kontrolę nad krzywą.
Nie łatwo łączyć segmenty z ciągłością C 2 .
Rozwiązanie: Użycie funkcji składającej się kawałkami z
wielomianów/funkcji wymiernych.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Bazowa funkcja B-sklejana
Niech U = (u0 , . . . , um ) będzie niemalejącym ciągiem, tzn.
ui ¬ ui +1 , i = 0, . . . , m − 1.
Elementy ui nazywamy węzłami.
i -ta bazowa funkcja B-sklejana stopnia p (ozn. Ni ,p (u)):
(
1, ui ¬ u ¬ ui +1
0, wpw.
ui +p+1 − u
u − ui
Ni ,p−1 (u) +
Ni +1,p−1 (u)
Ni ,p (u) =
ui +p − ui
ui +p+1 − ui +1
Ni ,0 (u) =
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Nieułamkowa krzywa B-sklejana
Krzywa B-sklejana ma postać:
P(u) =
n
X
Pi Ni ,p (u), a ¬ u ¬ b,
i =0
gdzie Pi to punkty kontrolne, a Ni ,p (u) jest bazową funkcją
B-sklejaną.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Przykład - jednorodna krzywa 3go stopnia
Dla ui ¬ t ¬ ui +1 mamy:
Pi (t) =
0
X
Pi −j bj (t),
j=3
gdzie:
b0 (t) = 61 t 3
b1 (t) = 61 (1 + 3t + 3t 2 − 3t 3 )
b2 (t) = 61 (4 − 6t 2 + 3t 3 )
b3 (t) = 61 (1 − 3t + 3t 2 − t 3 )
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Niejednorodne ułamkowe krzywe B-sklejane
Nobody Understands Rational B-Splines
Non-Uniform Rational B-Spline
Krzywa NURBS p-tego stopnia ma postać:
Pn
Ni ,p (u)wi Pi
C (u) = Pi =0
, a ¬ u ¬ b,
n
i =0 Ni ,p (u)wi
gdzie {Pi } to punkty kontrolne, {wi } - wagi
Ni ,p (u) jest funkcją B-sklejaną stopnia p określoną na
wektorze U = {a, . . . , a, up+1 , . . . , um−p−1 , b, . . . , b }
| {z }
p+1
Michał Matuszak [email protected]
| {z }
p+1
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Załóżmy, że a = 0, b = 1 i wi > 0, dla dowolnego i .
Niech:
Ni ,p (u)wi
Ri ,p (u) = Pn
j=0 Nj,p (u)wj
Możemy teraz napisać:
C (u) =
n
X
Ri ,p (u)Pi
i =0
{Ri ,p (u)} nazywamy wymiernymi funkcjami bazowymi.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Wprowadzenie
Nieułamkowa krzywa
NURBS
Własności
Jeśli wi = a, dla każdego i i dowolnego a 6= 0 to:
Ri ,p (u) = Ni ,p (u)
Przesunięcie Pi wpływa na krzywą tylko na przedziale
[ui , ui +p+1 ).
Krzywa NURBS bez wewnętrznych punktów węzłowych jest
wymierną krzywą Béziera.
Krzywe NURBS zawierają (jako szczególny przypadek)
nieułamkowe krzywe B-sklejane oraz dowolne krzywe Béziera.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów
Wstęp
Wielomiany
Krzywe Béziera
Krzywe B-sklejane
Zadanie
Zadanie:
Napisz program rysujący:
Krzywą Béziera.
Krzywą B-sklejaną 3go stopnia.
Punkty kontrolne mają być określone za pomocą myszy.
Po narysowaniu krzywej powinna istnieć możliwość zmiany
położenia punktów kontrolnych (korzystając z myszy).
Zadanie dodatkowe:
Zaimplementuj krzywe NURBS. Użytkownik powinien mieć
wpływ na węzły. Program powienien zawierać co najmniej
dwie z poniższych funkcji:
Dodawanie węzła.
Usuwanie węzła.
Zwiększanie stopnia.
Zmniejszanie stopnia.
Michał Matuszak [email protected]
Laboratorium grafiki i multimediów