Ruotare un ottagono in una DrawingArea
Vai alla navigazione
Vai alla ricerca
Di seguito mostreremo un possibile codice per ruotare un Ottagono regolare disegnato in una DrawingArea. [nota 1]
Private DrawingArea1 As DrawingArea
Private Tmr As Timer
Private Const ScalaRaggio As Float = 0.2 ' Scala del raggio (dimensione dell'Ottagono)
Private Rotazione As Float ' Angolo di rotazione in radianti
Public Sub Form_Open()
With Me
.Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
.Arrangement = Arrange.Fill
End With
With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
.Background = Color.Lighter(Color.Yellow)
End With
Tmr = New Timer As "Tmr"
Tmr.Delay = 30 ' circa 33 FPS
Tmr.Start()
End
Public Sub DrawingArea1_Draw()
Dim cx As Float = DrawingArea1.W / 2
Dim cy As Float = DrawingArea1.H / 2
Dim r As Float = Min(DrawingArea1.W, DrawingArea1.H) * ScalaRaggio
Dim numSides As Integer = 8
Dim angleStep As Float = 2 * PI / numSides
Dim points As New PointF[numSides]
Dim i As Integer
For i = 0 To numSides - 1
Dim angle As Float = angleStep * i - PI / 2 + Rotazione
points[i] = New PointF(cx + r * Cos(angle), cy + r * Sin(angle))
Next
With Paint
.Brush = Paint.Color(Color.Black)
.LineWidth = 2
.MoveTo(points[0].X, points[0].Y)
For i = 1 To numSides - 1
.LineTo(points[i].X, points[i].Y)
Next
.LineTo(points[0].X, points[0].Y)
.Stroke
End With
End
Public Sub Tmr_Timer()
Rotazione += Rad(1.5) ' Rotazione di 1.5° per frame
If Rotazione >= 2 * Pi Then
Rotazione -= 2 * Pi
End If
DrawingArea1.Refresh()
End
Note
[1] Vedere anche la seguente pagina: Ruotare un esagono in una DrawingArea