Compartir a través de


Dibujar curvas spline cardinales

Una curva spline cardinal es una curva que pasa suavemente por un determinado conjunto de puntos. Para dibujar una curva spline cardinal, cree un objeto Graphics y pase la dirección de una matriz de puntos al método DrawCurve. En el siguiente ejemplo se dibuja una curva spline cardinal en forma de campana que pasa por cinco puntos designados:

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);

En la siguiente ilustración se muestran la curva y los cinco puntos.

Se puede usar el método DrawClosedCurve de la clase Graphics para dibujar una curva spline cardinal cerrada. En una curva spline cardinal cerrada, la curva pasa por el último punto de la matriz y conecta con el primer punto de la matriz.

En el siguiente ejemplo se dibuja una curva spline cardinal cerrada que pasa por seis puntos designados:

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);

En la ilustración siguiente se muestran la curva spline cardinal cerrada y los seis puntos.

Se puede cambiar la inclinación de una curva spline cardinal pasando un argumento de tensión al método DrawCurve. En el siguiente ejemplo se dibujan tres curvas spline cardinales que pasan por el mismo conjunto de puntos:

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);

En la ilustración siguiente se muestran las tres curvas spline con sus valores de tensión. Observe que cuando la tensión es 0, los puntos quedan conectados por líneas rectas.