Gráficos vectoriales con Visual Basic .NET

Marzo 2003

Cipriano Valdezate Sayalero y Manuel Valdezate Sayalero

 


 

Movimiento

 

Una de las aplicaciones más interesantes de GDI+ es la simulación de movimiento.

Todo se reduce a dibujar una figura, cambiarla de sitio, dibujar la figura en su

nuevo lugar y borrar la anterior. Para terminar este tutorial ofrecemos al lector un

sencillo osciloscopio que representa la función seno en movimiento. He aquí el

código:

 

Private Sub Movimiento_Click()

Me.BackColor = Color.Black

Lienzo = Me.CreateGraphics

Trayecto = New GraphicsPath()

 

'Movemos el eje de coordenadas al centro del formulario

Lienzo.TranslateTransform(Me.ClientSize.Width / 2, _

Me.ClientSize.Height / 2)

 

Dim m As Integer = 36 'Aleatorio

ReDim tr(m * 2) 'Metemos todo el recorrido en una matriz de

puntos

Dim i As Short : For i = -m To m

tr(i + m) = New Point(m / 3 * i, -m * 6 * Math.Sin(i))

Next

 

'Iniciamos el temporizador

With Timer1

.Interval = 100

.Enabled = True

.Start()

End With

 

Application.DoEvents()

End Sub

 

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As

System.EventArgs) Handles Timer1.Tick

If index > tr.GetUpperBound(0) - 4 Then index = 0

 

'Borramos los dos últimos puntos

Lienzo.DrawCurve(New Pen(Me.BackColor, 1600), tp)

 

'Metemos los cuatro últimos puntos en el array

tt(0) = tr(index)

tt(1) = tr(index + 1)

tt(2) = tr(index + 2)

tt(3) = tr(index + 3)

 

'Reservamos dos para borrarlos

tp(0) = tt(0)

tp(1) = tt(1)

 

index += 1

Me.Text = String.Format("X = {0}; Y = {1}", tt(3).X, tt(3).Y)

'Dibujamos la curva

 

Trayecto.AddCurve(tt)

Lienzo.DrawPath(New Pen(Color.Yellow, 4), Trayecto)

Trayecto.Reset()

End Sub

 

Private Sub Stop_Click()

Timer1.Stop()

Timer1.Enabled = False

End Sub

 

Private Lienzo As Graphics

Private Trayecto As GraphicsPath

Private index As Integer

Dim tr() As Point

Dim tt(3) As Point

Dim tp(1) As Point

 

 


Índice del curso GDI+
 

la Luna del Guille o... el Guille que está en la Luna... tanto monta...