Differenze tra le versioni di "Ruotare una figura piana intorno a una circonferenza in una DrawingArea"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il caso è quello in cui si disegna in una ''DrawingArea'' una figura piana (ad esempio un cerchio) che ruota intorno a una circonferenza. In questo esempio si utilizzeranno...")
 
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Il caso è quello in cui si disegna in una ''DrawingArea'' una figura piana (ad esempio un cerchio) che ruota intorno a una circonferenza.
+
Il caso è quello in cui si disegna in una ''DrawingArea'' una figura piana (ad esempio un cerchio) che ruota intorno a una circonferenza. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
  
In questo esempio si utilizzeranno i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione.
+
===Usando i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione===
 +
In questo esempio si utilizzeranno i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione. <SUP>&#091;[[#Note|Nota 2]]&#093;</sup>
 
  Private an As Float
 
  Private an As Float
 
    
 
    
Riga 27: Riga 28:
 
     .stroke
 
     .stroke
 
     .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
 
     .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
  <FONT Color=gray>' ''Un valore positivo dell'angolo di rotazione determina una rotazione in senso antiorario, un valore negativo invece una rotazione in senso orario:''</font>
+
  <FONT Color=gray>' ''Un valore positivo dell'angolo di rotazione determina una rotazione in senso antiorario, mentre un valore negativo determina una rotazione in senso orario:''</font>
 
     .Rotate(Rad(-an))
 
     .Rotate(Rad(-an))
 
     .Brush = .Color(Color.Red)
 
     .Brush = .Color(Color.Red)
Riga 43: Riga 44:
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 +
===Usando una formula trigonometrica per effettuare la rotazione===
 +
In questo esempio si utilizzerà una formula trigonometrica per effettuare la rotazione.
 +
Private an As Float
 +
 
 +
'''Public''' Sub Form_Open()
 +
 +
  Me.Arrangement = Arrange.Fill
 +
 +
  With DrawingArea1
 +
    .X = 0
 +
    .Y = 0
 +
  End With
 +
 
 +
  With Timer1
 +
    .Delay = 10
 +
    .Start
 +
  End With
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub DrawingArea1_Draw()
 +
 +
  Dim x, y, r, t As Short
 +
 
 +
  x = DrawingArea1.W / 2
 +
  y = DrawingArea1.H / 2
 +
<FONT Color=gray>' ''Lunghezza del raggio della circonferenza:''</font>
 +
  r = 50
 +
 
 +
  With Paint
 +
    .Arc(x, y, r, Rad(0), 360, False)
 +
    .stroke
 +
    .Brush = .Color(Color.Red)
 +
<FONT Color=gray>' ''In quest'altro caso un valore positivo dell'angolo di rotazione determina una rotazione in senso orario, mentre un valore negativo determina una rotazione in senso antiorario:''</font>
 +
    .Arc(x + (r * Cos(Rad(an))), y + (r * Sin(Rad(an))), 5, Rad(0), 360, False)
 +
    .Fill
 +
    .End
 +
  End With
 +
 
 +
'''End'''
 +
 +
'''Public''' Sub Timer1_Timer()
 +
 +
  Inc an
 +
  DrawingArea1.Refresh
 +
 
 +
'''End'''
 +
 +
 +
 +
=Note=
 +
[1] Per vedere lo spostamento di un punto lungo una circonferenza immaginaria in una DrawingArea: [[Disegnare_in_una_DrawingArea_dei_punti#Visibile_soltanto_il_punto_corrente_disegnato_usando_la_Classe_Paint|Disegnare in successione dei punti in una DrawingArea]]
 +
 +
[2] Vedere anche questa pagina: [[Ruotare_qualsiasi_elemento_da_disegnare_in_una_DrawingArea|Ruotare qualsiasi elemento da disegnare in una DrawingArea]]

Versione attuale delle 09:02, 4 giu 2023

Il caso è quello in cui si disegna in una DrawingArea una figura piana (ad esempio un cerchio) che ruota intorno a una circonferenza. [Nota 1]

Usando i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione

In questo esempio si utilizzeranno i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione. [Nota 2]

Private an As Float
 
Public Sub Form_Open()

 Me.Arrangement = Arrange.Fill

 With DrawingArea1
   .X = 0
   .Y = 0
 End With
 
 With Timer1
   .Delay = 10
   .Start
 End With
 
End


Public Sub DrawingArea1_Draw()

 With Paint
   .Arc(DrawingArea1.W / 2, DrawingArea1.H / 2, 50, Rad(0), 360, False)
   .stroke
   .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
' Un valore positivo dell'angolo di rotazione determina una rotazione in senso antiorario, mentre un valore negativo determina una rotazione in senso orario:
   .Rotate(Rad(-an))
   .Brush = .Color(Color.Red)
   .Arc(40, 40, 5, Rad(0), 360, False)
   .Fill
   .End
 End With
 
End

Public Sub Timer1_Timer()

 Inc an
 DrawingArea1.Refresh
 
End


Usando una formula trigonometrica per effettuare la rotazione

In questo esempio si utilizzerà una formula trigonometrica per effettuare la rotazione.

Private an As Float
 
Public Sub Form_Open()

 Me.Arrangement = Arrange.Fill

 With DrawingArea1
   .X = 0
   .Y = 0
 End With
 
 With Timer1
   .Delay = 10
   .Start
 End With
 
End


Public Sub DrawingArea1_Draw()

 Dim x, y, r, t As Short
 
 x = DrawingArea1.W / 2
 y = DrawingArea1.H / 2
' Lunghezza del raggio della circonferenza:
 r = 50
 
 With Paint
   .Arc(x, y, r, Rad(0), 360, False)
   .stroke
   .Brush = .Color(Color.Red)
' In quest'altro caso un valore positivo dell'angolo di rotazione determina una rotazione in senso orario, mentre un valore negativo determina una rotazione in senso antiorario:
   .Arc(x + (r * Cos(Rad(an))), y + (r * Sin(Rad(an))), 5, Rad(0), 360, False)
   .Fill
   .End
 End With
 
End

Public Sub Timer1_Timer()

 Inc an
 DrawingArea1.Refresh
 
End


Note

[1] Per vedere lo spostamento di un punto lungo una circonferenza immaginaria in una DrawingArea: Disegnare in successione dei punti in una DrawingArea

[2] Vedere anche questa pagina: Ruotare qualsiasi elemento da disegnare in una DrawingArea