Spline

Innen: testwiki
Ugrás a navigációhoz Ugrás a kereséshez
Spline használata egy grafikus programban

Spline-on szakaszosan parametrikus polinomokkal leírt görbét értünk. Az n-edfokú spline-ban legfeljebb n-edfokú polinomszakaszok csatlakoznak egymáshoz úgy, hogy nemcsak a folytonosságot, hanem az n-1-szeri differenciálhatóságot is biztosítják.

A szakaszonként lineáris spline-t lineáris, a másodfokút kvadratikus, és a harmadfokút kubikus spline-nak is nevezik. A gyakorlati alkalmazásokban leginkább a kubikus spline-okat használják. Néha előfordulnak kvadratikus, és ötödfokú spline-ok is.

A számítógéppel segített tervezésben (CAD) és a számítógépes grafikában azért használják őket előszeretettel, mert egyszerű és interaktív szerkesztést tesznek lehetővé, pontosságuk, stabilitásuk és könnyű illeszthetőségük révén igen komplex formákat lehet velük jól közelíteni. A spline angol szó (kiejtése: szplájn), és nevét arról a rugalmasan hajlítható vonalzóról kapta, melyet hajóépítők és rajzolók használtak korábban.

Általában

A spline-okat 1946-ban először Isaac Jacob Schoenberg említette meg.

Spline-okat többnyire interpolációra, approximációra és ábrázolásra használnak. Az így nyert görbék és felületek olyan simák, amennyire csak lehetnek, nincsenek rajtuk nagyobb kilengések, és rugalmasabban módosíthatók, mint a polinomok. Egyes típusaik szakaszonként változtathatók úgy, hogy közben a görbe nagyobb része megmarad.

A spline név a hajóépítésből ered; ott az építéshez használt hajlékony vonalzót nevezték spline-nak.

Peremfeltételek

A spline görbe nem egyértelmű peremfeltételek nélkül. Ezek a feltételek periodikus esetben természetesek, hiszen a görbének simán kell záródnia. Egy másik természetes feltétel, hogy egy elég sokadik derivált nulla.

Nem záródó görbék illesztéséhez két módszer terjedt el: a körérintős és a tükrözési eljárás. Az így megadott érintők szolgáltatják az induló deriváltat.

Jelölje az első három pontot P1, P2, P3. A körérintős eljárásban kört illesztenek az első három P1, P2, P3 pontra azok síkjában. Veszik a kiindulási pontból a körhöz húzott érintőt; ez megadja az induló érintő irányát. Ennek hossza megegyezik a P1P2 szakasz hosszával. Ha a három pont egy egyenesre esik, akkor az érintő megegyezik az első pontból a második pontba mutató vektorral.

A tükörérintős eljárásban a P1P2 vektor egyenesére tükrözött P1P3 vektor iránya adja meg az érintő irányát, aminek hossza megint csak P1P2.

Hasonlóan adják meg az utolsó érintőt is.

A két módszer különböző eredményt ad. Ritkább pontsorozatok esetén ez jól látszik; elég sűrű pontsorozatok esetén a különbség szemmel nem látható.

Az egyes koordinátákat külön-külön számítják, és csak a végén teszik össze ismét őket.

Elsőfokú spline

Legyen x1, x2, … rendezett pontsorozat. Ekkor az interpoláláshoz használt bázisfüggvények alakja:

ui(x)=xxixixi1xi1+xi+1xxi+1xixi

Ha i = 0, vagy i = n, akkor a nem értelmezett tag nulla:

u0(x)=x1xx1x0x0

és

un(x)=xxnxnxn1xn1

Így kapjuk az elsőfokú dongafüggvényt:

s1(x)=1nfiui

ahol fi az xi-ben előírt érték.

Másodfokú spline

A másodfokú spline-nál a peremfeltételek nem szimmetrikusak: meg lehet adni induló deriváltat, de ezzel a végpontban kapott derivált már egyértelmű. A másodfokú taghoz másodrendű osztott differenciát használnak:

s2(x)=fi+f'i(xxi)+f[xi,xi,xi+1](xxi)2

ahol f[xi,xi,xi+1] az i-edik kétszeres pontban és az i+1-edik pontban vett másodrendű osztott differencia.

Ez a másodrendű osztott differencia így számítható:

f[xi,xi,xi+1]=f'if[xi+1,xi]xi1xi

ahol

f[xi+1,xi]=fi+1fixi+1xi

Harmadfokú spline

Harmadfokú spline esetén a peremfeltételek szimmetrikusak, a kezdő- és a végpontban is megadható derivált. A gyakorlati alkalmazásokban ezek a legnépszerűbbek, mert elég nagy szabadságot adnak a görbe alakjának megválasztásához.

A következőkben feltesszük, hogy az adott pontsorozat egyenlő közű, ekvidisztáns, vagyis a szomszédos pontok távolságát ugyanakkorának vesszük. Ha az adott pontok távolsága nagy mértékben változik, akkor a kapott görbét át kell paraméterezni.

Bázisfüggvények

A harmadfokú spline függvényeket mind interpolációra, mind approximációra, mind ábrázolásra használják. Az ezekhez használt függvénybázisok:

Hermite-polinomok:

  • α0(v) = 1 - 3v2 + 2v3
  • α1(v) = 3v2 - 2v3
  • β0(v) = v - 2v2 + v3
  • β1(v) = v3 - v2

B-spline:

Definiáljuk a következő függvényt:

N4:=
16v3 ha 0v1
16(43v(v2)2) ha 1v2
16(3v(v28v+20)44) ha 2v3
16(4v)3 ha 3v4
és 0 egyébként.

Legyen Nr = Nv+4-r. Ekkor az Nr függvények alkotják a bázist.

Bernstein-polinomok:

Az i-edik n-edfokú Bernstein-polinom:

Bn,i=(ni)vi(1v)ni

Görbék interpolációja

Jelölje rendre x0, x1, x2, … az egyes pontokban előírt értéket, és e0, e1, e2, … az adott pontokban előírt deriváltat. Az egyes szegmensek összeillesztésekor a simasági feltételekből lineáris egyenletrendszer adódik.

Az Hermite-polinomok használatával:

Zárt görbe esetén:

az egyenletrendszer minden egyenlete

ei-1 + 4ei + ei+ 1 = bi

alakú, ahol i 0-tól n-ig megy, és e0 = en, e1 = en+1, és e2 = en+2.

A bi-k így számíthatók:

bi = 3( xi+1 - xi-1 )

Nyílt görbe esetén van két szabad paraméter, az induló és az érkező derivált. Felhasználásukkal a szélső egyenletek:

4e1 + e2 = b1 en-2 + 4en-1 = bn-1

a közbülső egyenletek pedig a zárt görbe esetéhez hasonlók.

Az egyenletek jobb oldala csak a szélső esetben különbözik a zárt esettől, ugyanis itt még az ott választott deriváltakat is le kell vonni belőle:

b1 = 3( x2 - x0 ) - e0

és

bn-1 = 3( xn - xn-2 ) - en

Az interpolációval nyert függvény a [0,1] szakaszon:

η(v) = x0α0(v) + x1α1(v) + e0β0(v) + e1β1(v)

A függvény többi szakasza hasonlóan határozható meg.

A B-spline segítségével:

A belső egyenletek alakja:

16ci+1+23ci+2+16ci+3=xi

ahol i = 0, …, n.

Ha a görbe nyílt, akkora két szabad paramétert a szélső pontokban felhasználva a szélső egyenletek alakja:

12c1+12c3=e0

és

12cn+1+12cn+3=en

Az interpolációval kapott függvény:

φ(v)=r=1n+3crNr(v)

Görbék approximációja

A harmadfokú B-spline-bázissal approximálnak is. Az interpolációtól eltérve azonban mások a szélső függvények, mert az approximációhoz az kell, hogy a bázisfüggvények összege azonosan egy legyen. A következőkben az Ni,l jelölésben l jelenti a fokszámot. Ha legfeljebb öt alappont van, akkor a bázis csak a szélső függvényeket tartalmazza. A szélső pontok multiplicitása l + 1.

A szélső függvények:

  • n = 3, I = [0,1]:

Ekkor a B-spline függvények éppen a harmadfokú Bernstein-polinomok:

N0,3(v)=(1v)3

N1,3(v)=3(1v)2v

N2,3(v)=3(1v)v2

N3,3(v)=v3

  • n = 4, I = [0,2]:

N0,3(v)=(1v)3 ha 0v1, és 0 különben

N1,3=

74v392v2+3v ha 0v1

14(2v)3 ha 1v2

N2,3=

v22(32v) ha 0v1

12(v2)2(2v1) ha 1v2

N3,3(v)=(2v)N0,3(v)

  • n = 5, I = [0,3]:

Az N0,3, és az N1,3 függvények, mint előbb, azonosan nullaként kiterjesztve a [2,3] szakaszra. N3,3 = N2,3(3-u), és N4,3 = N1,3(3-u).

Már csak az N2,3 függvényt kell megadni:

N2,3=

112(1811v) ha 0v1

14v(2v)2+16(3u)(2v2+6v3) ha 1v2

16(3v)3 ha 2v3

  • n > 5, I = [0,n-2]:

Az N0,3, az N1,3 és az N2,3 függvények, mint előbb, azonosan nullaként kiterjesztve a szakasz további részére. Ezekből az Nn-2,3, az Nn-1,3 és az Nn,3 függvények az (n-v) tényezővel szorozva kaphatók.

A belső függvények a harmadfokú B-spline-bázis megfelelő függvényei, ahol is N3,3 = N4. A többi ebből eltolással kapható.

A csatoláshoz úgy kell meghatározni a λ és a μ együtthatókat, hogy:

q1 = q0 + λ(pn - pn-1), λ > 0

és

q2 = λ2pn-2 - (3λ2 + 3λ + μ)pn-1 + (2λ2 + 3λ + 1 + μ)pn ha n > 3

és

q2 = λ2p1 - (2λ2 + 2λ + μ/2)p2 + (λ2 + 2λ + 1 + μ/2)p3 ha n = 3

ahol a pi és a qi pontok különböző szegmensekhez tartoznak.

Az egyes szegmenseken belül az approximációval kapott függvény:

u3=i=0nNi,3pi

Bézier-ívek:

A Bézier-ívek a Bernstein-polinomokkal állíthatók elő, a B-spline-okhoz hasonlóan. A csatolási együtthatók, és a függvényszegmensek ugyanúgy számíthatók.

Felületek interpolációja

Az interpolált felület így számítható:

r(u,v)=(ϱ0(u),ϱ1(u))[r(0,v)r(1,v)]+(r(u,0),r(u,0))[ϱ0(v)ϱ1(v)](ϱ0(u),ϱ1(u))[p0,0p0,1p1,0p1,1][ϱ0(v)ϱ1(u)]

ahol a folytonosan differenciálható ϱ0(t),ϱ1(t) függvényekre

ϱ0(t)+ϱ1(t)=1,

és

ϱ0(0)=1

ϱ0(1)=0

ϱ1(0)=0

ϱ1(1)=1

Hermite-interpoláció:

Az Hermite-felület így számítható:

r(u,v)=(α0(u),α1(u),β0(u),β1(u))M[α0(v)α1(v)β0(v)β1(v)]

ahol

M=[p0,0p0,1rv(0,0)rv(0,1))p1,0p1,1rv(1,0)rv(1,1))ru(0,0)ru(0,1)ruv(0,0)ruv(0,1)ru(1,0)ru(1,1)ruv(1,0)ruv(1,1)]

ahol a vegyes második deriváltaknak a csatolásban van jelentőségük.

A csatoláshoz megoldandó egyenletrendszer alakja:

ru(i1,j)+4ru(i,j)+ru(i+2,j)=3(pi+1,jpi1,j)

rv(i,j1)+4ru(i,j)+ru(i,j+1)=3(pi,j+1pi,j1)

ruv(i1,j)+4ruv(i,j)+ruv(i+1,j)=3(rv(i+1,j)rv(i1,j))

ruv(i,j1)+4ruv(i,j)+ruv(i,j+1)=3(ru(i,j+1)ru(i,j2))

minden i, j-re.

Ez egy túlhatározott egyenletrendszer, ami mégis megoldható.

Felületek approximációja

A görbékhez hasonlóan felületeket is lehet approximálni.

Az általános eljárás szerint olyan két változós Si,j(u,v) függvényeket kell venni, hogy:

i=0mj=0nSi,j(u,v)=1

ekkor az approximációval kapott felület egyenlete:

r(u,v)=i=0mj=0nSi,j(u,v)pi,j

ahol pi,j az approximációhoz megadott két indexes pontsorozat tagja.

Bézier-felületek:

A Bézier-felületek esetén

Si,j(u,v)=Bi,m(u)Bj,n(v)

A csatolási összefüggések:

[0100]BTBT[1vv2v3]=h1(v)[0123]BQBT[1vv2v3]+h2(v)[1111]BQBT[012v3v2]

ahol T és Q tartalmazza a két felülethez megadott két paraméteres pontsorozat pontjainak koordinátáit:

T=[t0,0t0,1t0,2t0,3t1,0t1,1t1,2t1,3t2,0t2,1t2,2t2,3t3,0t3,1t2,3t3,3]

Q=[q0,0q0,1q0,2q0,3q1,0q1,1q1,2q1,3q2,0q2,1q2,2q2,3q3,0q3,1q2,3q3,3]

és B:

B=[1000330036301331]

A folytonos differenciálhatóság miatt a peremvonalon:

r~u(1,v)=h1(v)ru(1,v)+h2(v)rv(1,v)

ahol ru és rv a két csatlakozó felületdarab egyenlete.

B-spline felületek:

A B-spline felületek esetén az Si,j függvények a megfelelő B-spline függvények szorzatai:

Si,j(u,v)=Ni,m(u)Nj,n(v)

A továbbiakban a számolás a Bézier-felületekhez hasonlóan folytatódik.

Ötödfokú spline

Ötödfokú spline-ok használatakor a harmadfokú spline-okhoz hasonló módszerek használhatók ugyanezeknek a spline-családoknak az ötödfokú elemeivel, és más, ötödfokú csatolási együtthatókkal. Ekkor a széleken a második deriváltak is megadhatók. Ez nagyobb szabadságot, de több bonyodalmat jelent.

Források

Külső hivatkozások

Sablon:Commonskat

Sablon:Portál

Sablon:Csonk-dátum Sablon:Csonk-dátum