4. Sple Bézer Coos 4. SPLINE Cíl Po prostudováí této ptol budete umět popst defovt fuce teré jsou záldem pro tvorbu řve defovt zdávt dt pro progrm vreslováí grfů těchto fucí řešt příld z prxe řv Výld 4.. Sple fuce Slovo "sple" ozčuje pružé homogeí lťové řvíto teré užívl ostrutéř trupu lodí. V prx se používá - téměř bez výjm - ubcých splů. Proč právě ubcých splů? Shou v počítčové grfce je plovt poud možo jedodušší výpočt s ohledem rchlost výpočtů. Křv druhého stupě evhovují protože eobshují flexí bod. Neumožňují ted změu řvost. Křv třetího vššího stupě tuto vlstost mjí - obshují flexí bod tudíž umožňují změu řvost. Všší j třetí stupeň vš eí vhodý. Musí ovšem být splě předpold. Nechť jsou dá bod (x )( x ) ( x )...( x ) de pltí x < x < x <... < x. Kubcá sple fuce f(x) splňuje ásledující podmí: ) f(x ) = = b) tervlu < x x + > pltí f ( x ) = f ( x ) =... - de f ( x ) je polom třetího stupě c) fuce f f f jsou spojté tervlu < x x >. Polom f ( x ) můžeme psát ve tvru: x x x x x x je to ubcá sple fuce určeá 4 oefcet. Zdé fučí hodot předstvují (+) podmíe (vz bod ) defce). Podmíou spojtost fucí f f f j j f x f x =... - j = 56
4. Sple Bézer Coos zísáme ( -) rovc. Celem ted máme defcí ubcé sple fuce zdáo (4 - ) podmíe. Pro výpočet ubcé sple fuce je ted uté romě bodů ( x )... ( x ) zdt ještě dvě dlší podmí. Nejčstěj se užívá "orjových podmíe": ebo ) zdáí b) zdáí specálě se užívá volb = = p mluvíme o přrozeém ubcém splu. Uážeme í j pro jedotlvé "orjové podmí" provést výpočet splu. Určeí oefcetů polomů f ( x ) provedeme ve dvou fázích:. určíme hodot ;. pomocí Fergusových oblouů určíme oblou mez dým bod. Užtím Hermtov terpolce podle vzthů (.4) vpočteme oefcet. Odvodíme í vzth pro řešeí fáze výpočtu. Fuc f ( x ) vjádříme podle vzthů (.4 ) v mtcovém tvru ( = x + - x ): f x x x x x x x x x x x x x.. Je zřejmé že př výpočtu dervcí fuce f ( x ) stčí dervovt vetor [( x - x ) ( x - x ) x - x ]. Z podmí f x f x vpočteme =... - f x f x 57
4. Sple Bézer Coos 6 6 6 4 6. 6 6 4.. Po úprvě zísáme rovc ( 4. ) pro = -. Pro zdé hodot můžeme soustvu leárích rovc pro výpočet - psát ve tvru ( > ): ( 4. ) A. B de A = + + - - - - - - - 58
4. Sple Bézer Coos 59 - - - - - - - - - - - + + B = Mtce A soustv je trdgoálí dgoálě domtí smetrcá. Řešeím soustv (4.) vpočteme hodot... - užtím vzthu (.4)- předcházející ptol je možé sestvt rovce splu pro dé orjové podmí. Tvr soustv pro výpočet... pro přípd přrozeého ubcého splu. Podmí f (x ) = vede rovc tj.. ( 4. ) Podmí f (x ) = vede rovc - - - -. - ( 4. ) Soustvu pro výpočet dervcí... pro přrozeý sple můžeme záldě rovc (4.) ( 4. ) psát ve tvru B A. p p ( 4.4 )
4. Sple Bézer Coos 6 de B p Příld. Pro tbulu hodot (z mulého příldu) určete ubcou přrozeou sple fuc. Dá tbul: x 6 Dle ( 4.4 ) sestvíme soustvu: = t. j. mtce p A je tpu * = =. p A
4. Sple Bézer Coos Pltí: p A p B.6. 9 4 4 4. 6 Rozšířeá mtce soustv je (druhý řáde ásobíme dvěm): 6 8 4 Ted = = = 5 5 9 99 Užtím rovc (.4) lze sestvt rovce splu: de f x x x x = + 5 + = = - - ( -5 + ) = = 5 =. Prví oblou bude dá polomem Pro druhý: de f x x x x 5. f x x x x 6 8 4 4 6. 9 4 Ted fx x 8x 8x 4. Pro uvedeou tbulu přrozeý spl bude: x 5 x pro x f(x) = x 8x 8x 4. pro x > 6.
4. Sple Bézer Coos 4. Sple řv - rové prostorové. Defce. Nechť jsou dá polohové vetor P P... P opěrých bodů reálá čísl t < t <... < t. Kubcou sple řvou P(t) de t < t t > zveme řvu pro íž ždá slož vetorového vjádřeí je sple fucí prmetru t pro dvojce (t s )... (t s ) de s s jsou příslušé slož vetoru P P. Volbou čísel t t... t - určujeme prmetrzc sple řv. Nejčstěj se užívá tzv. uformích splů t.j. volí se t = Kubcá sple fuce je jedozčě urče opěrým bod s polohovým vetor Orjové podmí jsou P P "orjovým podmím". ) zdé prvích dervcí v bodech x x. b) zdé druhé dervce v bodech x x. Jestlže je P " = P " = - potom mluvíme o přrozeé sple řvce. c) zdáím že řv je uzvřeá. 6 de =.... Přípd ) - stčí smozřejmě včíslt vetor P... P - ( > ) užtím soustv (4.). Pro = =... = - = máme soustvu de A = 4 P A. P 4 4 B (P - P ) - P (P - P ) B = (P - - P - ) (P - P - ) - P Pro = je soustv tvoře jedou rovcí: P P P P P. 4 4 4 (4.5)
4. Sple Bézer Coos Pro = je sple řv totožá s Fergusoovou řvou. Pro přípd b ). Ze soustv (4.) : P p A. = p B ( 4.6 ) de P 4 4 4 p A = 4 pro = (P - P ) (P - P ) pro = (P - P ) p A = (P - P - ) (P - P - ) Pro uzvřeou řvu - použjeme vzthu ( 4. ): P + 4 P + + P + = ( P + - P ) ( 4.7 ) pro = -. Protože jde o uzvřeou řvu můžeme položt P + = P P + = P t ze vzthu (4.7) pro = - můžeme zíst: pro = P - + 4 P + P = ( P - P ) ( 4.8 ) P + 4 P + P = ( P - P ). ( 4.9 ) Soustvu pro výpočet tečých vetorů uzvřeé sple řv záldě (4.9)(4.7)(4.8) můžeme psát ve tvru ( > ) u A P. u P ( 4. ) B 6
4. Sple Bézer Coos de u A 4 4 4 4 4 u B P P P P P P P P P P - - Příld. Určete přrozeou sple řvu v rově pro opěré bod P = [ ] P = [- ] P = [ - -]. Nejprve určíme tečé vetor P P P. Vjdeme ze soustv ( 4. ). Pltí = tudíž: ( ) A 4 B ( ) ( ) P - P P - P P - P Řešeím těchto dvou soustv leárích rovc ( př. Gussovou elmcí dosteme tečé vetor v opěrých bodech. 9 9 4 9 7 9 6 6 9 6 Ted: P = [.75 ; -] 7 75 9 5. ; ;. ; P = 5 9 75. ; ;. ;. P = Ze vzthů určíme dv Fergusoov oblou. (Kptol.4.) Prví z ch je: P ( t ) = [ ; ]. F ( t ) + [ - ; ]. F ( t ) + [ -.75 ; ]. F ( t ) + [ -.5 ; ]. F ( t ) t < >.. P ( t ) = [.75 t -.75 t + ; -t + t ]. 64
4. Sple Bézer Coos Druhý bude vjádře v prmetru v <> pro bod P P tečé vetor P P. P ( v ) = [ - ; ].F ( v ) + [ -;- ].F ( v ) + [ -.5; ]. F ( v ) + [.75 ;-].F 4 ( v ) = = [ -.75v +.5v -.5v - ; v - v + ]. Výsledá řv ted bude popsá rovcem [.75t -.75t + ; -t +t ] pro t < > P ( t ) = [-.75(t-) +.5(t-) -.5( t- ) - ; (t-) - ( t- ) + ] pro t < >. R t F t G F t H F t g F t h pro t < >. G H... polohové vetor bodů; g h... vetor teče v bodech ve terých je Fergusoov řv jedozčě urče. Pro F = pltí : F t t t F t t t F t t t t Pro t =... R(t) = G; pro t =... R(t) = H Pro g = h... GH je proxmováo úsečou. F t t t t < >. Otáz 4.. Chrterzujte sple fuce sple řv. Zdáí použtí.. Dejte příld použtí sple řv. Otevřeé uzvřeé. Úloh řešeí 4. Příld 4.. Jsou dá bod P P P P teč v ch P P P P. Zobrzte ) zdé bod; b) teč v zdých bodech ( d = ); c) přrozeý sple zdým bod; d) prvoúhlý průmět do prví průmět. Zobrzte v osoúhlém promítáí (q volte prmetrc). 65
4. Sple Bézer Coos Klíč 4.. P [ ] P [.75 -.75 ] P [ ] P [.75.75.75 ] P [ ] P [ -.75.75 ] P [ ] P [ -.75 -.75 -.75] P [ ] P [.75 -.75 ] P ( t ) = P F ( t ) + P F ( t ) + P F ( t ) + P F 4 ( t ) = P ( t ) = [ ].F ( t ) + [ ].F ( t ) + [.75 -.75 ].F ( t ) + + [.75.75.75 ].F 4 ( t ) P : prví oblou "X" : = - +.5 = -.5 t = ( - ) + + = ( - ) -.5 -.75 =.75 t = ( - ) - - =.75 t = = "Y" : = ( - ).. = t = -.75... = -.5 t = -.75 t "Z" : =.75 t = -.75 t = = P ( t ) = [ -.5t +.75t +.75t ; -.5t -.75t ; t -.75t ] pro t < >. P : druhý oblou X : Y : Z : = ( ) + =.v - +.5 = -.5 v - +.75 = -.5 v = -.75 = -.75 v -.5 =.75 v -.5 =.75 =.74 v = v P ( v ) = [-.75v +.75v +; -.5v +.75v +.75v; -.5v +.5v +.75v ] P : třetí oblou pro v < >. P ( s ) = [ -.5s -.75 s -.75 s + ; -.75 s +.75s + ; -.5 s -.5 s + ] P 4 : čtvrtý (posledí) oblou pro s < >. P 4 ( u ) = [.75u -.75 u;.5 u -.75 u -.75u + ; -.75 u +.5 u -.75 u ] pro u < >. 66
4. Sple Bézer Coos Příld 4.. Určete ubcou sple fuc pro opěré bod X = ( ) X = ( ) X = ( ) de = =. = X ( ) = X X ( ) X ( ) = = f ( x ) = f ( x ) = x < > X X f ( x ) = x < > f = - polom - stupě f ( x ) = R (x-x ) + S (x-x ) + T (x-x ) + U =. Klíč 4.. Ze zdáí ple: f ( x ) = f ( ) = ( 5 ) f ( x ) = f ( ) = f ( x ) = f ( ) = f ( x ) = f ( ) = f ( x ) = f ( ) = ( 6 ) f ( x ) = f ( ) = ( 7 ) f ( x ) = f ( x ) f ( x ) = f( x ) x = ( 8 ) U = R + S + T + U = x = U = R + S + T + U = f ( ) = ( 9 ) T = R + S + T = ( ) ze ( 7 ) R + S + T = T ( ) f ( x ) = f ( x ) 6R + S = S Z ( ) R + S + T = T = Z ( 8 ) ( 9 ) ( ) oefcet pro fuce f. R = t - = 5 4 R = + = 7 4 ( ) S = - + = 5 4 S = - - = 5 T = T = U = U = Z ( ) ( ) pro : 6-6 - + = - 4-6 = 4 67
4. Sple Bézer Coos Sple fuce ted je 5 4 x + 5 4 x + x pro x < > f( x ) = 7 4 (x-) 5 (x-) 4 (x-) + pro x < >. 4. Bézerov řv. Cíl Po prostudováí této ptol budete umět popst defovt Bézerov řv jejch vlstost defovt B-sple řv ostruovt Bézerov B-sple řv. Nechť Výld m P m > jsou polohové vetor vrcholů lomeé čár. Bézerov řv (BK) pro dou lomeou čáru je dá rovcí: R(t) = R( t) m PB ( t) de t R( t) je polohový vetor bodů řv B m jsou tzv. Bersteov polom. m m m Tj. B m ( t) t t. Dodefováo: Zobrzeí grfů Bersteových polomů pro hodot: BK pro m = R( t) P B m ( t) m = m m m B m ( t) t t m. P P P t R t t t t t t t P t P t t P t B B B 68
4. Sple Bézer Coos m = P P P P R t t t t t t t t t P t P t t P t t P t B B B B Obr. 4. N obrázu 4. jsou zázorě polom pro jedotlvé stupě Bersteových polomů. 4... Vlstost Bézerových řve.. Počátečí ocový bod oblouu výsledé řv. Pro R().... B m () = B m () = pro =... m => R() = P počátečí bod. Protože B m () = pro =... m- B mm () = => R() = P m ocový bod polomu Bézerových řve.. Tečé vetor BK v počátečích ocových bodech. Je zřejmé R () = P B m () Jelož B m () = [( - t)] = -m pltí B m () = [m.t.( - t) m- ] = m B m( ) pro = m m = t= t= podobě R () = m. (P - P ) teč v počátečím bodě R () = m. (P m - P m- ) teč v ocovém bodě. 69
4. Sple Bézer Coos 4... Geometrcá ostruce bodů Bézerových řve. Pro jedoduchost zvolíme m =. ) Zvolíme hodotu prmetru t < >. b) Určíme bod P P P strách řídcího polgou t že P P P P P P = = = t P P P P P P P P P c) Určíme bod P přímce P P P bod P přímce P P t že P P P P P P P P = P P = t P Bod P je bodem Bézerov řv P d) Bod P přímce P P splňující vzth P P P P = t P Obr. 4. P je bodem Bézerov řv pro prmetr t. Příld. Určete Bézerovu řvu pro polgo P () P (5) P (5) P (). Slož R(t) vetoru jsou: x.b.. t.b t.b t.b t. t. t.. t. t.. t t t 6. t t t t. B t 5. B t 5. B t. B t 5. B t B t 5. t t t t t t t t t t t 45. 45 Ted prmetrcé vjádřeí oblouu je R(t) = [ t ; 45 ( t - t )] pro t < >. Příld 4. Určete Bézerovu řvu pro polgo V () V () V () V 4 (). x. B ( t). B ( t). B ( t). B ( t).. t. t. t. t t t 6t t. B ( t). B ( t). B ( t). B ( t) t 6t t t. t t t z. B ( t). B ( t). B ( t). B ( t).. t t.. t. t t t 5t t Ted R( t) t 6t t ; t t ; 5t t pro t < >. 7
4. Sple Bézer Coos 4.4. Coosov B-sple řv je zobecěím Bézerových řve - doshuje se terpolcí řv po obloucích. Oblou ubcého Coosov B-splu je urče vetorovou rovcí R( t) PC t t. 6 C t t t t t C t t 6t 4 C t t t t C ( t) t Grf bázových fucí C (t) = jsou obrázu 4.. Záldí vlstost Coosov oblouu B-sple. ) Počátečí ocový bod oblouu: pro t = dosteme C () = C () = C () = 4 C () =. Ted R( ) P 4P P P P P P. 6 Počáte oblouu leží v bodě R() terý leží v jedé třetě dél těžce trojúhelí P P P od bodu P. Teto bod se zývá "ttěžště" trojúhelí P P P (Vz obráze 4.4) 4 C C Obr. 4.4 Pro t = pltí C () = C () = C () = C () = 4 ted R( ) P 4P P P P P P. 6 Obdobě ocovým bodem oblouu bude bod R() terý leží v jedé třetě dél těžce trojúhelí P P P od bodu P. R() je tzv "ttěžštěm" trojúhelí P P P. ) Teč v počátečím ocovém bodě B-sple řvce. P R() P R() Určíme R(). Pltí: C () = - C () = C () = C () =. Obr. 4.4 Ted R( ) P P. Teč v bodě R() je ted rovoběžá s přímou P P. Podobě lze uázt že teč v bodě R() je rovoběžá s přímou P P. P P 7
4. Sple Bézer Coos. Porováí Bézerov B-sple řv pro dý polgo Bézerov řv je stupě m. B-sple řv je slože z m- oblouů. (. oblou je urče bod P P P P ;. oblou je urče bod P P P P 4 td...) P m pro m. Nevýhodou B-sple řv ted je že "eprochází" prvím posledím bodem zdého m polgou P... P m. Toto lze odstrt áhrdím polgoem Q. Teto áhrdí polgo musíme určt t b se B - sple řv pro teto áhrdí polgo dotýl původího polgou v počátečím ocovém bodě původího polgou. pro m = 4 bude pltt Q P 6 P P Q P P P P P Q P 6 P P m m m m Q P P P P P m m m m m pro dlší vrchol bude pltt Q = P pro =... m-. pro m = určíme áhrdí polgo bod ( Obr. 4.5). Q P P Q P P Q Q 6 P P Q Q 6 P P. P P Q Q P P P 4 Q Q Q 4 Obr. 4.5 7
4. Sple Bézer Coos V ásledujícím progrmu je řešeí Coosov B-sple řv terá prochází počátečím ocovým bodem. Jde o způsob d je vprcová obecá procedur pro čtř růzé bod A B C D. Procedur je plová postupě všech zdé bod t že vvolá pro (A A A B) prví zdý bod řv je vzt -rát. Attěžště "trojúhelí" AAA je bod A je to ted počátečí bod řv. Dále je procedur vvolá pro bod (A A B C) prví zdý bod řv je vzt -rát. Spojce bodů A B je tečou řv. Dále je procedur plová ž (-)-ho zdého bodu. Následuje obdobý postup s tím že jsou ztotožňová posledí dv bod. Z výpsu možého progrmového řešeí je postup zřejmý. procedure Coos (A B C D: Bod); cost Kro =.; vr X Y XX YY : teger; T T T T4 : rel; t : rel; SqrT SqrTdec : rel; beg t := ; SqrTdec := sqr (-t); {příprvý přepočet} SqrT := sqr (t); T := SqrTdec*(-t) / 6; {Řídící fuce} T := (*SqrT*t - 6*SqrT + 4) / 6; T := (-*SqrT*t + *SqrT + *t + ) / 6; T4 := SqrT*t / 6; XX := roud (A.X*T + B.X*T + C.X*T + D.X*T4); YY := roud (A.Y*T + B.Y*T + C.Y*T + D.Y*T4); whle t <= do beg t := t + Kro; SqrTdec := sqr(t-); SqrT := sqr(t); T := SqrTdec*(-t) / 6; T := (*SqrT*t - 6*SqrT + 4) / 6; T := (-*SqrT*t + *Sqrt + *t + ) / 6; 7
4. Sple Bézer Coos T4 := SqrT*t / 6; {spočítej ové bod} X := roud (A.X*T + B.X*T + C.X*T + D.X*T4); Y := roud (A.Y*T + B.Y*T + C.Y*T + D.Y*T4); put_le (XX YY X Y); {resb úseč ze strého bodu do bodu ového} XX := X; YY := Y; {uchováí předchozí pozce} ed {whle} ed; {Coos} Progrmové řešeí. procedure B_Sple (P: Bod; N: bte); { vstupem je pole bodů P[N] řídícího polgou } vr : bte; beg Coos (P[] P[] P[] P[]); { z trojásobého bodu do spojce P P } Coos (P[] P[] P[] P[]); { dále z tohoto bodu do ttěžště } for := to N- do { po třech se vzují oblou } Coos (P[] P[+] P[+] P[+]); Coos( P[N-] P[N-] P[N] P[N]); { logc oc řv } Coos( P[N-] P[N] P[N] P[N]) { oec v trojásobém bodu } ed; {B_Sple} Příld 5. Určete ubcý Coosův B-sple polgou terý je áhrdím polgoem příldu. Polgo je dá bod P ( ) P ( 5) P ( 5) P ( ). Protože m = dosteme: Q P P 5 Q P P 5 Q Q 6 P P 75 Q Q 6 P P 6 75. Pro polgo Q Q Q stovíme ubcou Coosovu B-sple řvu. Jestlže rozepíšeme uvedeé vzth do slože dosteme rovce x = t ; = 45 (t - t ). Př použtí áhrdího polgou jsme dostl stejé vjádřeí jo je výsledá řv (Fergusoov) pro bod P P tečé vetor (P - P ) (P - P ). 74
4. Sple Bézer Coos Úloh řešeí 4.. Určete prostorovou Fergusoovu řvu pro bod G = ( ) H = () tečé vetor g = ( ) h = ( ). Proveďte promítcí metodou de je možo volt úhel pohledu. Zobrzte jede pomocý průmět prostorové řv do ěteré z rov (x) ebo (z).. Určete ubcou sple fuc pro opěré bod () () () hodot druhých dervcí " = 5/ " = -/.. Stovte rovce rové Bézerov řv o vrcholech řídcího polgou () () () () (4). Kotrolí otáz 4.. Dejte příld použtí Bézerových řve. Co je Bézerov řv?. Křv určeé lomeou črou. Bézerov řv prcp zdáí.. B-sple řv - Bézerov řv. Porovejte. 75