Disegnare in una DrawingArea un esagono regolare: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Di seguito mostreremo un possibile codice per disegnare un Esagono regolare su una ''DrawingArea''.
Di seguito mostreremo un possibile codice per disegnare un Esagono regolare su una ''DrawingArea''.
I 6 vertici dell'Esagono regolare sono stati correttamente individuati sulla circonferenza ideale, alla quale detti vertici appartengono, dividendo l'angolo di 360° per il numero dei vertici del Pentagono (360° / 6 = 60°). Ciascun vertice si troverà sulla circonferenza ogni 60 gradi.
<BR>E' possibile variare la dimensione dell'Esagono, modificando il raggio della circonferenza, sulla quale i suoi vertici insistono.
  Private DrawingArea1 As DrawingArea
  Private DrawingArea1 As DrawingArea
Private Const <FONT Color=#B22222>RAGGIO</font> As Single = 100.0
Private Const ESAGONO As Byte = 6
Private coord As Single[]
Private pol As New Single[]
   
   
   
   
Riga 13: Riga 6:
   
   
   With Me
   With Me
     .W = Screen.AvailableWidth
     .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight)
    .H = Screen.AvailableHeight
     .Arrangement = Arrange.Fill
     .Arrangement = Arrange.Fill
   End With
   End With
Riga 23: Riga 15:
  End
  End
   
   
Public Sub Form_Arrange()
   
   
   coord = [DrawingArea1.W / 2, DrawingArea1.H / 2]
Public Sub DrawingArea1_Draw()
    
   For t As Short = 0 To 360 Step 360 / ESAGONO
   Dim cx As Float = DrawingArea1.W / 2
     pol.Push(RAGGIO * Cos(Rad(t)))
  Dim cy As Float = DrawingArea1.H / 2
    pol.Push(RAGGIO * Sin(Rad(t)))
  Dim r As Float = Min(DrawingArea1.W, DrawingArea1.H) * 0.2    <FONT Color=gray>' ''Raggio dell'Esagono''</font>
  Dim numSides As Integer = 6                                  <FONT Color=gray>' ''Esagono = 6 lati''</font>
  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                <FONT Color=gray>' ''Rotazione per partire da cima''</font>
     points[i] = New PointF(cx + r * Cos(angle), cy + r * Sin(angle))
   Next
   Next
   
   
End
  With Paint
    .Brush = Paint.Color(Color.Black)
    .LineWidth = 2
   
   
Public Sub DrawingArea1_Draw()
    .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)
   
   
  With Paint
    .Polygon([(coord[0] + pol[0]), (coord[1] + pol[1]), (coord[0] + pol[2]), (coord[1] + pol[3]), (coord[0] + pol[4]), (coord[1] + pol[5]), (coord[0] + pol[6]), (coord[1] + pol[7]), (coord[0] + pol[8]), (coord[1] + pol[9]), (coord[0] + pol[10]), (coord[1] + pol[11])])
     .Stroke
     .Stroke
    .End
   End With
   End With
   
   
  End
  End

Versione attuale delle 21:36, 27 lug 2025

Di seguito mostreremo un possibile codice per disegnare un Esagono regolare su una DrawingArea.

Private DrawingArea1 As DrawingArea


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

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) * 0.2    ' Raggio dell'Esagono
 Dim numSides As Integer = 6                                   ' Esagono = 6 lati
 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 per partire da cima
   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