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