Rappresentare su una DrawingArea l'onda oscillante di una serie di dati
Vai alla navigazione
Vai alla ricerca
Con il seguente codice mostreremo un possibile esempio, per poter rappresentare su una DrawingArea l'onda oscillante di una serie di dati, ottenuti in questo caso in modo casuale.
Private Const AMPIEZZA As Integer = 1
Private DrawingArea1 As DrawingArea
Private Timer1 As Timer
Private punti As New Integer[][]
Private posy As Integer
Public Sub _new()
Randomize
With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
.W = 400
.H = 200
.Background = Color.Black
End With
Timer1 = New Timer As "Timer1"
' Genera tanti punti quanto è ampia l'area di disegno:
punti.Resize(DrawingArea1.Width)
' Per evitare valori nulli, assegna a ogni indice dell'array valori [0, 0]:
For i As Integer = 0 To DrawingArea1.Width - 1
punti[i] = [0, 0]
Next
' Assegna il primo punto partendo da x = 0, y = metà dell'altezza dell'area di disegno:
punti[0] = [0, DrawingArea1.H / 2]
' Crea un array di punti con posizioni che variano tra -1 e 1:
PosizionaPunti()
Timer1.Delay = 200
Timer1.Start
End
Private Procedure PosizionaPunti()
' Il valore x aumenta di 0 fino alla larghezza dell'area di disegno.
' Abbiamo la posizione del primo punto.
For i As Integer = 1 To DrawingArea1.Width - 1
' Genera valori tra -1 e 1:
posy = Int(Rnd(-1, 2))
punti[i][0] = i
punti[i][1] = punti[i - 1][1] + posy
If punti[i][1] <= 1 Then
punti[i][1] += 1
Else If punti[i][1] >= DrawingArea1.Height - 1 Then
punti[i][1] -= 1
Endif
Next
End
Public Sub DrawingArea1_Draw()
Paint.LineWidth = AMPIEZZA
For i As Integer = 0 To punti.Max
Paint.FillRect(punti[i][0], punti[i][1], AMPIEZZA, AMPIEZZA, Color.Yellow)
Next
PosizionaPunti()
End
Public Sub Timer1_Timer()
DrawingArea1.Refresh
End