Differenze tra le versioni di "Ruotare una figura piana intorno a una circonferenza in una DrawingArea"
Da Gambas-it.org - Wikipedia.
(2 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>[[[#Note|Nota 1]]]</sup> |
===Usando 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>[[[#Note|Nota | + | In questo esempio si utilizzeranno i Metodi "Paint.Translate()" e "Paint.Rotate()" per effettuare la rotazione. <SUP>[[[#Note|Nota 2]]]</sup> |
Private an As Float | Private an As Float | ||
− | + | Public Sub Form_Open() | |
Me.Arrangement = Arrange.Fill | Me.Arrangement = Arrange.Fill | ||
Riga 19: | Riga 19: | ||
End With | End With | ||
− | + | End | |
− | + | Public Sub DrawingArea1_Draw() | |
With Paint | With Paint | ||
Riga 36: | Riga 36: | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Timer1_Timer() | ||
Inc an | Inc an | ||
DrawingArea1.Refresh | DrawingArea1.Refresh | ||
− | + | End | |
Riga 49: | Riga 50: | ||
In questo esempio si utilizzerà una formula trigonometrica per effettuare la rotazione. | In questo esempio si utilizzerà una formula trigonometrica per effettuare la rotazione. | ||
Private an As Float | Private an As Float | ||
− | + | ||
− | + | ||
+ | Public Sub Form_Open() | ||
Me.Arrangement = Arrange.Fill | Me.Arrangement = Arrange.Fill | ||
Riga 64: | Riga 66: | ||
End With | End With | ||
− | + | End | |
− | + | Public Sub DrawingArea1_Draw() | |
Dim x, y, r, t As Short | Dim x, y, r, t As Short | ||
Riga 86: | Riga 88: | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Timer1_Timer() | ||
Inc an | Inc an | ||
DrawingArea1.Refresh | DrawingArea1.Refresh | ||
− | + | End | |
− | |||
=Note= | =Note= | ||
− | [1] Vedere anche questa pagina: [[ | + | [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]] |
Versione attuale delle 05:42, 27 giu 2024
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