Ruotare un esagono in una DrawingArea

Da Gambas-it.org - Wikipedia.
Versione del 27 lug 2025 alle 21:41 di Vuott (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Di seguito mostreremo un possibile codice per ruotare un Esagono 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'esagono)
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 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


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 = 6
 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



Note

[1] Vedere anche la seguente pagina: Ruotare un pentagono in una DrawingArea