Creazione di spline di tipo Cardinal

Una spline di tipo Cardinal è una curva che passa per un dato insieme di punti. Per disegnare una spline di tipo Cardinal creare un oggetto Graphics e passare al metodo DrawCurve l'indirizzo di una matrice di punti. Nell'esempio che segue si disegna una spline di tipo Cardinal a campana che passa attraverso cinque punti designati:

Dim points As Point() = { _
   New Point(0, 100), _
   New Point(50, 80), _
   New Point(100, 20), _
   New Point(150, 80), _
   New Point(200, 100)}
      
Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawCurve(pen, points)
[C#]
Point[] points = {
   new Point(0, 100),
   new Point(50, 80),
   new Point(100, 20),
   new Point(150, 80),
   new Point(200, 100)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawCurve(pen, points);

Nell'illustrazione che segue si mostra la curva e cinque punti.

È possibile utilizzare il metodo DrawClosedCurve della classe Graphics per disegnare una spline di tipo Cardinal chiusa. In questo tipo spline la curva continua fino all'ultimo punto della matrice e si collega con il primo punto di essa.

Nell'esempio che segue viene disegnata una spline di tipo Cardinal chiusa che passa attraverso sei punti designati:

Dim points As Point() =  { _
   New Point(60, 60), _
   New Point(150, 80), _
   New Point(200, 40), _
   New Point(180, 120), _
   New Point(120, 100), _
   New Point(80, 160)}
      
Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawClosedCurve(pen, points)
[C#]
Point[] points = {
   new Point(60, 60),
   new Point(150, 80),
   new Point(200, 40),
   new Point(180, 120),
   new Point(120, 100),
   new Point(80, 160)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawClosedCurve(pen, points);

Nell'illustrazione che segue si mostra la spline chiusa e i sei punti.

È possibile modificare la curvatura di una spline di tipo Cardinal passando un argomento di tensione al metodo DrawCurve. Nell'esempio che segue vengono disegnate spline curve di tipo Cardinal che passano per lo stesso insieme di punti:

Dim points As Point() =  { _
   New Point(20, 50), _
   New Point(100, 10), _
   New Point(200, 100), _
   New Point(300, 50), _
   New Point(400, 80)}
      
Dim pen As New Pen(Color.FromArgb(255, 0, 0, 255))
e.Graphics.DrawCurve(pen, points, 0F)
e.Graphics.DrawCurve(pen, points, 0.6F)
e.Graphics.DrawCurve(pen, points, 1F)
[C#]
Point[] points = {
   new Point(20, 50),
   new Point(100, 10),
   new Point(200, 100),
   new Point(300, 50),
   new Point(400, 80)};

Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255));
e.Graphics.DrawCurve(pen, points, 0.0f);
e.Graphics.DrawCurve(pen, points, 0.6f);
e.Graphics.DrawCurve(pen, points, 1.0f);

Nell'illustrazione che segue sono mostrate le tre curve e i relativi valori di tensione. Si noti che quando la tensione è 0 i punti sono collegati da linee rette.