Differenze tra le versioni di "Ruotare un quadrato ed un rettangolo in una DrawingArea"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Nella presente pagina vedremo come far ruotare su se stessi, ossia intorno al proprio asse centrale, un quadrato ed un rettangolo disegnati su una ''DrawingArea''. #Nota|<SU...") |
|||
Riga 4: | Riga 4: | ||
==Ruotare un quadrato sul proprio asse centrale== | ==Ruotare un quadrato sul proprio asse centrale== | ||
Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una ''DrawingArea'' è possibile adottare il seguente codice: | Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una ''DrawingArea'' è possibile adottare il seguente codice: | ||
− | <FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice. Il | + | <FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice. Il quadrato ruoterà a seconda di dove esso si pone nel vortice.''''''</font> |
Private fRaggio As Float <FONT Color=gray>' ''Memorizza la lunghezza del raggio del cerchio.''</font> | Private fRaggio As Float <FONT Color=gray>' ''Memorizza la lunghezza del raggio del cerchio.''</font> | ||
Riga 106: | Riga 106: | ||
==Ruotare un rettangolo sul proprio asse centrale== | ==Ruotare un rettangolo sul proprio asse centrale== | ||
Per ottenere la rotazione sul proprio asse centrale di un rettangolo disegnato in una ''DrawingArea'' è possibile adottare il seguente codice analogo al precedente: | Per ottenere la rotazione sul proprio asse centrale di un rettangolo disegnato in una ''DrawingArea'' è possibile adottare il seguente codice analogo al precedente: | ||
− | <FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice. Il rettangolo ruoterà a seconda di | + | <FONT Color=gray>' '''''Il fulcro di Translate agisce da vortice. Il rettangolo ruoterà a seconda di dove esso si pone nel vortice.''''''</font> |
Private fRaggio As Float <FONT Color=gray>' ''Memorizza la lunghezza del raggio del cerchio.''</font> | Private fRaggio As Float <FONT Color=gray>' ''Memorizza la lunghezza del raggio del cerchio.''</font> | ||
Private xArc As Float <FONT Color=gray>' ''Memorizza il centro del cerchio.''</font> | Private xArc As Float <FONT Color=gray>' ''Memorizza il centro del cerchio.''</font> | ||
Private yArc As Float <FONT Color=gray>' ''Idem''</font> | Private yArc As Float <FONT Color=gray>' ''Idem''</font> | ||
− | Private x As Float <FONT Color=gray>' ''Memorizza l'inizio del | + | Private x As Float <FONT Color=gray>' ''Memorizza l'inizio del rettangolo.''</font> |
Private y As Float <FONT Color=gray>' ''Idem''</font> | Private y As Float <FONT Color=gray>' ''Idem''</font> | ||
− | Private iAlt As Integer <FONT Color=gray>' ''Memorizza l'altezza del | + | Private iAlt As Integer <FONT Color=gray>' ''Memorizza l'altezza del rettangolo.''</font> |
− | Private iLarg As Integer <FONT Color=gray>' ''Memorizza la larghezza del | + | Private iLarg As Integer <FONT Color=gray>' ''Memorizza la larghezza del rettangolo.''</font> |
Private fAngolo As Float <FONT Color=gray>' ''Memorizza i gradi dell'angolo.''</font> | Private fAngolo As Float <FONT Color=gray>' ''Memorizza i gradi dell'angolo.''</font> | ||
Private fSopra1 As Float <FONT Color=gray>' ''Memorizza la posizione di partenza orizzontale della rotazione.''</font> | Private fSopra1 As Float <FONT Color=gray>' ''Memorizza la posizione di partenza orizzontale della rotazione.''</font> | ||
Riga 135: | Riga 135: | ||
iLarg = 200 | iLarg = 200 | ||
iAlt = 150 | iAlt = 150 | ||
− | <FONT Color=gray>' ''Se la rotazione è centrale, posiziona il | + | <FONT Color=gray>' ''Se la rotazione è centrale, posiziona il rettangolo al centro dell'area di disegno'' |
− | ' ''così come le misure di partenza e di arrivo; e siccome il | + | ' ''così come le misure di partenza e di arrivo; e siccome il rettangolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza del rettangolo:''</font> |
x = CFloat((da.W / 2) - (iLarg / 2)) | x = CFloat((da.W / 2) - (iLarg / 2)) | ||
y = CFloat((da.H / 2) - (iAlt / 2)) | y = CFloat((da.H / 2) - (iAlt / 2)) | ||
Riga 206: | Riga 206: | ||
− | + | ---- | |
− | |||
=Nota= | =Nota= | ||
[1] I codici, presenti in questa pagine, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro ''Gianluigi'' del forum di ''gambas-it.org'' e del membro ''Shell'' del forum ''gambas-es.org'' . | [1] I codici, presenti in questa pagine, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro ''Gianluigi'' del forum di ''gambas-it.org'' e del membro ''Shell'' del forum ''gambas-es.org'' . |
Versione delle 13:11, 3 ott 2015
Nella presente pagina vedremo come far ruotare su se stessi, ossia intorno al proprio asse centrale, un quadrato ed un rettangolo disegnati su una DrawingArea. Nota1
Ruotare un quadrato sul proprio asse centrale
Per ottenere la rotazione sul proprio asse centrale di un quadrato disegnato in una DrawingArea è possibile adottare il seguente codice:
' Il fulcro di Translate agisce da vortice. Il quadrato ruoterà a seconda di dove esso si pone nel vortice.' Private fRaggio As Float ' Memorizza la lunghezza del raggio del cerchio. Private xArc As Float ' Memorizza il centro del cerchio. Private yArc As Float ' Idem Private x As Float ' Memorizza l'inizio del quadrato. Private y As Float ' Idem Private iAlt As Integer ' Memorizza l'altezza del quadrato. Private iLarg As Integer ' Memorizza la larghezza del quadrato. Private fAngolo As Float ' Memorizza i gradi dell'angolo. Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione. Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione. Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione. Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione. Public Sub Form_Open() Me.Center attivaDisegno() End Public Sub da_Draw() iLarg = 200 iAlt = 200 ' Se la rotazione è centrale, posiziona il quadrato al centro dell'area di disegno ' così come le misure di partenza e di arrivo; e siccome il quadrato ruota su se stesso, si dà al raggio del cerchio mezza lunghezza del quadrato: x = CFloat((da.W / 2) - (iLarg / 2)) y = CFloat((da.H / 2) - (iAlt / 2)) fRaggio = CFloat(iLarg / 2) ' In questa dimostrazione il fulcro (vortice) è sempre il centro dell'area di disegno: xArc = CFloat((da.W / 2)) yArc = CFloat(da.H / 2) fSopra1 = CFloat((da.W / 2)) fSopra2 = CFloat(da.H / 2) fSotto1 = CFloat(- (da.W / 2)) fSotto2 = CFloat(- (da.H / 2)) With Paint .Begin(da) ' Vortice: .Translate(fSopra1, fSopra2) .Rotate(Rad(fAngolo)) .Translate(fSotto1, fSotto2) .Rectangle(x, y, iLarg, iAlt) .Arc(xArc, yArc, fRaggio) .Stroke .End End With End Public Sub attivaDisegno() da.Clear da.Refresh End Public Sub btSinistra_Click() ' Ogni volta che si agisce sul tasto incrementa il valore di un grado: ' (positivo = senso antiorario) fAngolo += 1 If fAngolo = 405 Then fAngolo = 1 attivaDisegno() End Public Sub btDestra_Click() ' Ogni volta che si agisce sul tasto decrementa il valore di un grado: ' (negativo = senso orario) fAngolo -= 1 If fAngolo = -405 Then fAngolo = -1 attivaDisegno() End Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso. attivaDisegno() End
Ruotare un rettangolo sul proprio asse centrale
Per ottenere la rotazione sul proprio asse centrale di un rettangolo disegnato in una DrawingArea è possibile adottare il seguente codice analogo al precedente:
' Il fulcro di Translate agisce da vortice. Il rettangolo ruoterà a seconda di dove esso si pone nel vortice.' Private fRaggio As Float ' Memorizza la lunghezza del raggio del cerchio. Private xArc As Float ' Memorizza il centro del cerchio. Private yArc As Float ' Idem Private x As Float ' Memorizza l'inizio del rettangolo. Private y As Float ' Idem Private iAlt As Integer ' Memorizza l'altezza del rettangolo. Private iLarg As Integer ' Memorizza la larghezza del rettangolo. Private fAngolo As Float ' Memorizza i gradi dell'angolo. Private fSopra1 As Float ' Memorizza la posizione di partenza orizzontale della rotazione. Private fSopra2 As Float ' Memorizza la posizione di partenza verticale della rotazione. Private fSotto1 As Float ' Memorizza la posizione di arrivo orizzontale della rotazione. Private fSotto2 As Float ' Memorizza la posizione di arrivo verticale della rotazione. Public Sub Form_Open() Me.Center attivaDisegno() End Public Sub da_Draw() iLarg = 200 iAlt = 150 ' Se la rotazione è centrale, posiziona il rettangolo al centro dell'area di disegno ' così come le misure di partenza e di arrivo; e siccome il rettangolo ruota su se stesso, si dà al raggio del cerchio mezza lunghezza del rettangolo: x = CFloat((da.W / 2) - (iLarg / 2)) y = CFloat((da.H / 2) - (iAlt / 2)) fRaggio = CFloat(iLarg / 2) ' In questa dimostrazione il fulcro (vortice) è sempre il centro dell'area di disegno: xArc = CFloat((da.W / 2)) yArc = CFloat(da.H / 2) fSopra1 = CFloat((da.W / 2)) fSopra2 = CFloat(da.H / 2) fSotto1 = CFloat(- (da.W / 2)) fSotto2 = CFloat(- (da.H / 2)) With Paint .Begin(da) ' Vortice: .Translate(fSopra1, fSopra2) .Rotate(Rad(fAngolo)) .Translate(fSotto1, fSotto2) .Rectangle(x, y, iLarg, iAlt) .Arc(xArc, yArc, fRaggio) .Stroke .End End With End Public Sub attivaDisegno() da.Clear da.Refresh End Public Sub btSinistra_Click() ' Ogni volta che si agisce sul tasto incrementa il valore di un grado: ' (positivo = senso antiorario) fAngolo += 1 If fAngolo = 405 Then fAngolo = 1 attivaDisegno() End Public Sub btDestra_Click() ' Ogni volta che si agisce sul tasto decrementa il valore di un grado: ' (negativo = senso orario) fAngolo -= 1 If fAngolo = -405 Then fAngolo = -1 attivaDisegno() End Public Sub Form_Resize() ' Con questo evento se cambia la dimensione del Form, il disegna non va perso. attivaDisegno() End
Nota
[1] I codici, presenti in questa pagine, sono tratti - con modifiche ed integrazioni - da suggerimenti del membro Gianluigi del forum di gambas-it.org e del membro Shell del forum gambas-es.org .