Grafika Komputerowa Krzywe B-sklejane Alexander Denisjuk denisjuk@pjwstk.edu.pl Polsko-Japońska Wyższa Szkoła Technik Komputerowych zamiejscowy ośrodek dydaktyczny w Gdańsku ul. Brzegi 55 80-045 Gdańsk Grafika Komputerowa p. 1
Krzywe B-sklejane Najnowsza wersja tego dokumentu dostępna jest pod adresem http://users.pjwstk.edu.pl/~denisjuk/ Grafika Komputerowa p. 2
Ô ¼ Ô ¼ Ô ½ Ô ½ Ô ¾ Ô ¾ Ô Ô ØÛÓ Ò Ö Ø Ö ¹ ÔÐ Ò ÙÖÚ Û Ø ÙÒ ÓÖÑÐÝ Ö ÒÓØ Ò Ò Ò ÓÒØÖÓÐ ÔÓ ÒØ º Ì Ö Ø Ö ÙÖÚ ÑÓÓØ Ö Ø Ò Ô Ö ØÛÓ ÙÖÚ Û Ö Ø Ö ØÛÓ ÙÖÚ ÔÔÖÓ Ø ÓÒØÖÓÐ Ø Ð ØØÐ ÑÓÖ ÐÓ Ðݺ ÓÑÔ Ö Û Ø Ø Ö Ø Þ Ö ÙÖÚ Ó ÔÓ ÒØ Krzywa B-sklejana (B-spline) µ Ö ØÛÓ ¹ ÔÐ Ò ÙÖÚ º µ Ö Ø Ö ¹ ÔÐ Ò ÙÖÚ º ÙÖ ÎÁÁÁº½ ÙÖ ÎÁÁº µ ÓÒ Ô ½ º Grafika Komputerowa p. 3
Ô¼ Ô½ Õ Õ Ô¾ Õ Õ Ô Ô Ô Ô Krzywa B-sklejana trzeciego stopnia ÙÖ ÎÁÁÁº¾ Ö Ø Ö ÙÒ ÓÖÑ ¹ ÔÐ Ò ÙÖÚ Û Ø Ú Ò ÓÒØÖÓÐ ÔÓ ÒØ º n q(u) = N i (u)p i, 3 u n + 1 i=0 N i (u) = 0 dla u i lub u i + 4 Grafika Komputerowa p. 4
Æ ¼ Æ ½ Æ ¾ Æ Æ Æ Æ ¼ ½ ¾ ½¼ ÙÒØ ÓÒ Æ Funkcje wagowe Ý ½ Ù ÙÖ ÎÁÁÁº Ì Ð Ò Ò ÙÒØ ÓÒ ÓÖ ÙÒ ÓÖÑ Ö Ø Ö ¹ ÔÐ Ò º ÙÔÔÓÖØ µº N i (u) = N 0 (u i) Obcięte wielomiany stopnia 3 N i C 2 i N i(u) = 1 dla u [3,n + 1] N i (u) 0 N i (u) = 0 dla u i lub u i + 4 Grafika Komputerowa p. 5
Funkcje wagowe R 0 (u) = N 0 (u), R 1 (u) = N 0 (u + 1), R 2 (u) = N 0 (u + 2), R 3 (u) = N 0 (u + 3) u [0, 1] R 0 (u) = 1 6 u3 R 1 (u) = 1 6 ( 3u3 + 3u 2 + 3u + 1) R 2 (u) = 1 6 (3u3 6u 2 + 4) R 3 (u) = 1 (1 u)3 6 Grafika Komputerowa p. 6
Funkcje wagowe R 0 (0) = 0, R 0 (0) = 0, R 0 (0) = 0, R 0 (1) = 1 6 = R 1(0), R 0 (1) = 1 2 = R 1 (0), R 0 (1) = 1 = R 1 (0), R 1 (1) = 2 3 = R 2(0), R 1 (1) = 0 = R 2 (0), R 1 (1) = 2 = R 2 (0), R 2 (1) = 1 6 = R 3(0), R 2 (1) = 1 2 = R 3 (0), R 2 (1) = 1 = R 3 (0), R 3 (1) = 0, R 3 (1) = 0, R 3 (0) = 0. Grafika Komputerowa p. 7
Æ ¼ Æ ¾ Æ Æ Æ Æ Æ Æ Æ Æ ½¼ Æ ½½ Ó ÓÖ Ö ÓÙÖ Ö Ø Ö µ Ð Ò Ò ÙÒØ ÓÒ Û Ø Ü ÑÔÐ ÒÓØ º Ì ÒÓØ Ú ØÓÖ ¼ ½ ¾ ½¼ ½½ ½¾ Ó Ö Ô Ø Ô ¼ Ô ½ Ô ¾ Ô ÎÁÁÁº Ü ÑÔÐ Ó Ò ÓÖ Ö ÓÙÖ ¹ ÔÐ Ò Ö Ø Û Ø Ö Ô Ø ÒÓØ º ÙÖ ÙÖÚ Ö Ø Û Ø Ø ÒÓØ Ú ØÓÖ Ò Ð Ò Ò ÙÒØ ÓÒ ÓÛÒ Ò Ì Ô ½¼ Ô ½½ Krzywa B-sklejana niejednorodna ÓÙ Ð ÒÓØ ÌÖ ÔÐ ÒÓØ ½ ƽ Ù ¼ ½ ¾ ½¼ ½½ ½¾ ÙÖ ÎÁÁÁº Ø Ø Ø ÒÓØ ÑÙÐØ ÔÐ ØÝ ØÛÓ Ò Ø ÒÓØ ÑÙÐØ ÔÐ ØÝ Ø Ö º węzły u 0 u 1 u l 1 u l węzły wielokrotne u i 1 u i = u i+1 u i+2 ÙÖ ÎÁÁÁº º ÁØ ÓÑ Ò º Grafika Komputerowa p. 8
N i,m zależy tylko od u i,...,u i+m Grafika Komputerowa p. 9 Krzywa B-sklejana stopnia m 1 (Cox de Boor) Dane sa węzły u 0 u 1 u l 1 u l. Dla i = 0, 1,...,l 1 wagi N i,1 = { 1 ui u < u i+1 0 N i,k+1 (u) = u u i u i+k u i N i,k (u) + u i+k+1 u u i+k+1 u i+1 N i+1,k (u) 0/0 = 0, (a/0) 0 = 0 N i,m jest obciętym (w węzłach) wielomianem stopnia m 1 supp N i,m = [u i,u i+m ] jest obciętym (w węzłach) wielomianem stopnia m 1
Æ ¼ ¾ Æ ½ ¾ Æ ¾ ¾ Æ ¾ Æ ¾ Æ ¾ Æ ¾ Æ ¾ Æ ¾ ¼ ½ ¾ ½¼ ÓÖ Ö ØÛÓ Ô Û Ö ÓÒ µ Ð Ò Ò ÙÒØ ÓÒ Û Ø Ì Ô ÒÓØ Ù º À Ö ½¼ Ò Ø Ö Ö ½ ÒÓØ Ò ÙÒ ÓÖÑÐÝ Przykład. Węzły jednorodne, m = 2 Ý ½ Ù ÙÖ ÎÁÁÁº ½ Ð Ò Ò ÙÒØ ÓÒ º Ì Ó Ø ¹ ÔÐ Ò ÙÖÚ Ó ÕÙ Ø ÓÒ ÎÁÁÁº¾µ N 0,2 = u 0 u 1, 2 u 1 u 2, 0 Ò ÓÖ ½ Ù ½º Grafika Komputerowa p. 10
Æ ¼ Æ ½ Æ ¾ Æ Æ Æ Æ Æ ÎÁÁÁº Ì ÓÖ Ö Ø Ö Ô Û Ö ØÛÓµ Ð Ò Ò ÙÒØ ÓÒ Û Ø ÙÖ ÒÓØ ÔÓ Ø ÓÒ Ù º Ï Ø ÐÐ Ú ½¼ Ø Ö Ö ½ ÒÓØ Ò ÙÒ ÓÖÑ ¾ Ð Ò Ò ÙÒØ ÓÒ º Ì Ó Ø ¹ ÔÐ Ò ÙÖÚ Ó ÕÙ Ø ÓÒ ÎÁÁÁº µ ÓÖ ¾ Ù ¾º Ò Przykład. Węzły jednorodne, m = 3 Ý ½ Ù ¼ ½ ¾ ½¼ N 0,3 = 1 2 u2 0 u < 1, 1 u(2 u) + 1 (3 u(u 1) 1 u < 2, 2 2 1 (3 2 u)2 2 u < 3, 0 Grafika Komputerowa p. 11
Æ ¼ Æ ½ Æ ¾ Æ Æ Æ Æ ¼ ½ ¾ ½¼ ÙÒØ ÓÒ Æ Przykład. Węzły jednorodne, m = 4 Ý ½ Ù ÙÖ ÎÁÁÁº Ì Ð Ò Ò ÙÒØ ÓÒ ÓÖ ÙÒ ÓÖÑ Ö Ø Ö ¹ ÔÐ Ò º ÙÔÔÓÖØ µº Grafika Komputerowa p. 12
Przykład. Krzywe Béziera węzły: 0, 0, 0, 0, 1, 1, 1, 1 { 1, 0 u 1 N 3,1 (u) = 0 N i,1 = 0 dla i 3 N 2,2 (u) = 1 u, N 3,2 (u) = u N 1,3 (u) = (1 u) 2, N 2,3 (u) = 2u(1 u), N 3,3 (u) = u 2 N 0,4 (u) = (1 u) 3, N 1,4 (u) = 3u(1 u) 2, N 2,4 (u) = 3u 2 (1 u), N 3,4 (u) = u 3 Grafika Komputerowa p. 13
Æ ¾ ¾ Æ ¾ Æ ¾Æ ¾ Æ ¾ Æ ¾ Æ ¾ Æ ¾ Æ ½ Æ ¼ Æ ½¼ ¾Æ ½½ ¾ Æ ½¼ Æ ½¾ ¾ Æ ½ ¾ Æ ½ ¾ Æ ½ Æ ½ ½ Æ Niejednorodne wielokrotne węzły węzły: 0, 0, 0, 0, 1, 2, 2 4, 5 31, 4, 5, 6, 7, 7, 8, 9, 10, 10, 10, 10 5 ÓÙ Ð ÒÓØ ½ Ù ½ ¾ ¾ ¾ ½¼ µ Ö ÓÒ Ð Ò Ò ÙÒØ ÓÒ º ÓÙ Ð ÒÓØ ½ Æ ¾ Æ Æ Æ Æ Æ Æ Æ Æ ½½ Æ ½¾ ƽ Ù ½ ¾ ¾ ¾ ½¼ µ Ö ØÛÓ Ð Ò Ò ÙÒØ ÓÒ º ÓÙ Ð ÒÓØ ½ Æ ½ Æ ¾ Æ Æ Æ Æ Æ Æ Æ Æ ½¼ ƽ½ Æ ½¾ Ù ½ ¾ ¾ ¾ ½¼ Grafika Komputerowa p. 14 µ Ö Ø Ö Ð Ò Ò ÙÒØ ÓÒ º
Właściwości Twierdzenie 1. Niech dane będa węzły u 0 u 1 u l. Wtedy funkcje wagowe N i,m (u) dla 0 i l m maja następujace właściwośi: supp N i,m = [u i,u i+m ] dla m 1 N i,m 0 l m i=0 N i,m(u) = 1 dla u m 1 u u l m+1 Grafika Komputerowa p. 15
Właściwości Twierdzenie 2. Niech dane będa węzły u 0 u 1 u l. Wtedy funkcje wagowe N i,m (u) dla 0 i l m maja następujace właściwośi: supp N i,m = [u i,u i+m ] dla m 1 N i,m 0 l m i=0 N i,m(u) = 1 dla u m 1 u u l m+1 n q(u) = N i,m (u)p i, u m 1 u u l m+1 = u n+1 i=0 q(u) = j i,m (u)p i, u j u u j+1 i=j m+1n Grafika Komputerowa p. 15
Właściwości Twierdzenie 3. Niech q(u) będzie krzywa B-sklejana stopnia m 1 i węzeł u i ma krotność µ. Wtedy q(u) ma ciagłe pochodne do stopnia m µ 1 w punkcie u i. Grafika Komputerowa p. 16
Wymierne B-sklejane krzywe (NURBS) p i = (x : y : z : w), q(u) = i N i,m (u)p i współrzędna w pozwala na powiększenie wagi punktu kontrolnego modelowanie krzywych stożkowych rzut perspektywiczny krzywej wymiernej jest zawsze krzywa wymierna punkty kontrolne moga być umieszczone w nieskończoności Grafika Komputerowa p. 17
NURBS w opengl (GLU) GLUnurbsObj curve1 ; curve1 = glunewnurbsrenderer ( ) ; glubegincurve ( curve1 ) ; glunurbscurve ( curve1, numknots, knotdata, s t r i d e, data, degparam,gl_map1_vertex_3 ) ; gluendcurve ( curve1 ) ; Grafika Komputerowa p. 18
NURBS w opengl (GLU) GLfloat knotvector [ 8 ] = { 0. 0, 0. 0, 0. 0, 0. 0, 1. 0, 1. 0, 1. 0, 1. 0 } ; GLfloat c t r l P t s [ 4 ] [ 3 ] = { { 4. 0, 1. 0, 0. 0 }, { 2. 0, 5. 0, 0. 0 }, { 3. 0, 4. 0, 0. 0 }, { 5. 0, 1. 0, 0. 0 } } ; GLUnurbsObj cubicbezcurve ; cubicbezcurve = glunewnurbsrenderer ( ) ; glubegincurve ( cubicbezcurve ) ; glunurbscurve ( cubicbezcurve, 8, knotvector, 3, & c t r l P t s [ 0 ] [ 0 ], 4, GL_MAP1_VERTEX_3 ) ; gluendcurve ( cubicbezcurve ) ; Grafika Komputerowa p. 19
NURBS Powierzchnie glubeginsurface ( surfname ) ; glunurbssurface ( surfname, nuknots, uknotvector, nvknots, vknotvector, ustride, vstride, & c t r l P t s [ 0 ] [ 0 ] [ 0 ], udegparam, vdegparam, GL_MAP2_VERTEX_3 ) ; gluendsurface ( surfname ) ; Grafika Komputerowa p. 20