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...") |
|||
(5 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> |
− | 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>[[[#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 18: | Riga 19: | ||
End With | End With | ||
− | + | End | |
− | + | Public Sub DrawingArea1_Draw() | |
With Paint | With Paint | ||
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 | + | <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 35: | Riga 36: | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Timer1_Timer() | ||
Inc an | Inc an | ||
DrawingArea1.Refresh | 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 | ||
+ | <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]] |
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