Differenze tra le versioni di "Ruotare un eptagono in una DrawingArea"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Di seguito mostreremo un possibile codice per ruotare un Eptagono regolare disegnato in una ''DrawingArea''. <SUP>[[[#Note|Nota 1]]]</sup> I 7 vertici dell'Eptagono...")
 
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Di seguito mostreremo un possibile codice per ruotare un Eptagono regolare disegnato in una ''DrawingArea''. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
Di seguito mostreremo un possibile codice per ruotare un Eptagono regolare disegnato in una ''DrawingArea''. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  
I 7 vertici dell'Eptagono 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° / 7 = 51,42 gradi). Ciascun vertice si troverà sulla circonferenza ogni 51,42 gradi.
+
I 7 vertici dell'Eptagono regolare sono stati correttamente individuati sulla circonferenza ideale, alla quale detti vertici appartengono, dividendo l'angolo di 360° per il numero dei vertici dell'Eptagono (360° / 7 = 51,42 gradi). Ciascun vertice si troverà sulla circonferenza ogni 51,42 gradi.
<BR>E' possibile variare la dimensione del Esagono, modificando il raggio della circonferenza, sulla quale i suoi vertici insistono.  
+
<BR>E' possibile variare la dimensione dell'Eptagono, modificando il raggio della circonferenza, sulla quale i suoi vertici insistono.  
 
<BR>La rotazione dell'Eptagono si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della ''DrawingArea''.
 
<BR>La rotazione dell'Eptagono si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della ''DrawingArea''.
 
<BR>Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza.
 
<BR>Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza.
Riga 14: Riga 14:
 
  Private coord As Single[]
 
  Private coord As Single[]
 
  Private pol As New Single[]
 
  Private pol As New Single[]
 +
Private c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
 +
Private f As Float[] = [0, 0.34, 0.67, 1]
 
   
 
   
 
   
 
   
Riga 38: Riga 40:
 
   Next
 
   Next
 
   
 
   
   xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6]) + coord[0] - pol[8] + coord[0] - pol[10] + coord[0] - pol[12]) / EPTAGONO
+
   xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6]) + coord[0] - pol[8] + coord[0] - pol[10] + coord[0] - pol[12] - ((52 * RAGGIO) / 100)) / EPTAGONO
 
   ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7] + coord[1] + pol[9] + coord[1] + pol[11] + coord[1] + pol[13]) / EPTAGONO
 
   ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7] + coord[1] + pol[9] + coord[1] + pol[11] + coord[1] + pol[13]) / EPTAGONO
 
   
 
   
Riga 56: Riga 58:
 
   
 
   
 
   With Paint
 
   With Paint
     .Translate(coord[0], coord[1]),
+
    .Brush = .LinearGradient(0, 20, 15, 0, c, f)
 +
     .Translate(coord[0], coord[1])
 
  <FONT Color=gray>' ''Un valore negativo dell'argomento della funzione "Rad()", farà ruotare l'Esagono in senso orario:''</font>
 
  <FONT Color=gray>' ''Un valore negativo dell'argomento della funzione "Rad()", farà ruotare l'Esagono in senso orario:''</font>
 
     .Rotate(Rad(-an))
 
     .Rotate(Rad(-an))

Versione attuale delle 04:37, 22 ott 2023

Di seguito mostreremo un possibile codice per ruotare un Eptagono regolare disegnato in una DrawingArea. [Nota 1]

I 7 vertici dell'Eptagono regolare sono stati correttamente individuati sulla circonferenza ideale, alla quale detti vertici appartengono, dividendo l'angolo di 360° per il numero dei vertici dell'Eptagono (360° / 7 = 51,42 gradi). Ciascun vertice si troverà sulla circonferenza ogni 51,42 gradi.
E' possibile variare la dimensione dell'Eptagono, modificando il raggio della circonferenza, sulla quale i suoi vertici insistono.
La rotazione dell'Eptagono si avvia semplicemente cliccando con il tasto sinistro del mouse sulla superficie della DrawingArea.
Il fulcro del Metodo ".Translate()" agisce da vortice, ossia da centro di rotazione intorno a una ipotetica circonferenza.

Private DrawingArea1 As DrawingArea
Private Const RAGGIO As Single = 100.0
Private Const EPTAGONO As Byte = 7
Private ANGOLO As Single = 0.8
Private an As Single
Private xs As Single
Private ys As Single
Private coord As Single[]
Private pol As New Single[]
Private c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
Private f As Float[] = [0, 0.34, 0.67, 1]


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With
 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .Background = Color.Lighter(Color.Yellow)
 End With

End

Public Sub Form_Arrange()

 coord = [DrawingArea1.W / 2, DrawingArea1.H / 2]
 
 For t As Short = 0 To 360 Step (360 / EPTAGONO)
   pol.Push(RAGGIO * Cos(Rad(t)))
   pol.Push(RAGGIO * Sin(Rad(t)))
 Next

 xs = (coord[0] + coord[0] + pol[2] + coord[0] + Abs(pol[4]) + coord[0] - Abs(pol[6]) + coord[0] - pol[8] + coord[0] - pol[10] + coord[0] - pol[12] - ((52 * RAGGIO) / 100)) / EPTAGONO
 ys = (coord[1] + coord[1] + pol[3] + coord[1] + pol[5] + coord[1] + pol[7] + coord[1] + pol[9] + coord[1] + pol[11] + coord[1] + pol[13]) / EPTAGONO

End

Public Sub DrawingArea1_MouseUp()

 While Object.IsValid(DrawingArea1)
   an += ANGOLO
   DrawingArea1.Refresh
   Wait 0.01
 Wend

End

Public Sub DrawingArea1_Draw()

 With Paint
   .Brush = .LinearGradient(0, 20, 15, 0, c, f)
   .Translate(coord[0], coord[1])
' Un valore negativo dell'argomento della funzione "Rad()", farà ruotare l'Esagono in senso orario:
   .Rotate(Rad(-an))
   .Polygon([(coord[0] + pol[0]) - xs, (coord[1] + pol[1]) - ys, (coord[0] + pol[2]) - xs, (coord[1] + pol[3]) - ys, (coord[0] + pol[4]) - xs, (coord[1] + pol[5]) - ys, (coord[0] + pol[6]) - xs, (coord[1] + pol[7]) - ys, (coord[0] + pol[8]) - xs, (coord[1] + pol[9]) - ys, (coord[0] + pol[10]) - xs, (coord[1] + pol[11]) - ys, (coord[0] + pol[12]) - xs, (coord[1] + pol[13]) - ys])
   .Stroke
   .End
 End With

End


Note

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