HIK Elektronikus Felsőoktatási Tankönyv- és Szakkönyvtár
A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerû felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

17.8.6. Cardinal spline

A cardinal spline egy a kontrollpontokat interpoláló, azaz az előre megadott pontokon adott sorrendben áthaladó görbe, tulajdonképpen elsőrendben folytonosan csatlakozó harmadfokú (kubikus) Hermit-görbék sorozata. Mivel az előző fejezetben már kimutattuk a Hermit- és a Bézier-görbe közötti kapcsolatot, ezért a cardinal spline megadhatjuk harmadfokú C1 folytonosan kapcsolódó Bézier-görbék sorozataként is. Járjunk el az utóbbi módon!

3 pontot interpoláló C1 folytonosan csatlakozó Bézier-görbék

Az i. Bézier szegmens kezdő és végpontja a szomszédos a pi és pi+1 pontok. A görbe deriváltja egy közbülső pi pontban párhuzamos pi-1 pi+1 egyenessel, azaz

Ne felejtsük el, hogy a harmadrendű Bézier-görbe négy pontjával (négy vektorral) adott, pl. négy kontrollpont, vagy ha Hermit-görbeként adjuk meg, akkor a kezdő és a vég pont, valamint a kezdő és a végpontban az érintők. Az i. Bézier szegmens kezdő és végpontja  Mivel a görbe érintője:

ezért minden kontrollpont minden szegmens esetén most már meghatározható. Az érintők meghatározásánál használhatunk egy tenziós értéket, amely az érintők nagyságát befolyásolja. Ha akkor a Catmul-Rom spline-t, ha akkor a kontrollpontokat összekötő poligont kapjuk meg.

A t tenziós érték hatása a görbe alakjára

Zárt görbe estén az érintő a kezdő és a végpontban is az általános képlettel határozható meg.

Zárt görbék különböző t értékeknél

Az előbbi képeket előállító program részlet:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

Pen redPen = new Pen(Color.Red, 4);

Color myColor = new Color();

FillMode myFill=new FillMode();

// Pontok megadása

PointF point1 = new PointF(100.0F, 350.0F);

PointF point2 = new PointF(250.0F, 150.0F);

PointF point3 = new PointF(430.0F, 170.0F);

PointF point4 = new PointF(550.0F, 400.0F);

PointF[] curvePoints ={

point1,

point2,

point3,

point4,

};

// Kontrolpoligon megrajzolása:

e.Graphics.DrawLines(redPen, curvePoints);

// Cardinal-spline kirajzolása változó tenziós értékkel:

for (float i = 0.0F; i <= 2; i+=0.5F)

{float tension = i*1.0F;

myColor=Color.FromArgb((int)(i*63.0F),(int)(i*63.0F),(int)(i*63.0F));

e.Graphics.DrawCurve(new Pen(myColor,2), curvePoints,tension);

// Zárt görbe előállítása:

e.Graphics.DrawClosedCurve(new Pen(Color.Red,2), curvePoints,tension,myFill);

}

}

Ahogy a fenti programrészletből láthattuk, hogy GDI+ segítségével lehetőségünk van cardinal spline előállítására DrawCurve metódussal. Mivel a GDI+ kihasználja, hogy a cardinal spline csatlakozó Bézier-görbékből áll, ezért szükség van egy Bézier-görbét előállító metódusra is. A DrawBezier négy kontroll pontra illeszt közelítő görbét, míg a DrawBeziers pedig C0 folytonosan kapcsolódó Bézier-görbéket rajzol.

7 pont esetén a DrawBeziers metódus futási eredménye