Ruotare un rombo in una DrawingArea: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
(Creata pagina con "Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''. E' possibile variare la dimensione del Rombo, modificando il raggio della cir...") |
Nessun oggetto della modifica |
||
| (8 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 1: | Riga 1: | ||
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''. | Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una ''DrawingArea''. | ||
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
Private Const <FONT Color= | Private Tmr As Timer | ||
Private | Private Const ScalaRaggio As Float = 0.2 <FONT Color=gray>' ''Scala del raggio (dimensione del Rombo)''</font> | ||
Private Rotazione As Float <FONT Color=gray>' ''Angolo di rotazione in radianti''</font> | |||
| Riga 18: | Riga 9: | ||
With Me | With Me | ||
. | .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight) | ||
.Arrangement = Arrange.Fill | .Arrangement = Arrange.Fill | ||
End With | End With | ||
With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" | With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" | ||
.Background = Color.Lighter(Color.Yellow) | .Background = Color.Lighter(Color.Yellow) | ||
End With | End With | ||
Tmr = New Timer As "Tmr" | |||
Tmr.Delay = 30 <FONT Color=gray>' ''circa 33 FPS''</font> | |||
Tmr.Start() | |||
End | End | ||
Public Sub DrawingArea1_Draw() | |||
Dim | Dim cx As Float = DrawingArea1.W / 2 | ||
Dim cy As Float = DrawingArea1.H / 2 | |||
Dim w As Float = DrawingArea1.W * 0.4 | |||
Dim h As Float = DrawingArea1.H * 0.3 | |||
Dim r As Float = 5 | |||
Dim points As New PointF[4] | |||
Dim i As Integer | |||
Dim basePoints As New PointF[4] | |||
basePoints[0] = New PointF(0, -h / 2) | |||
basePoints[1] = New PointF(w / 2, 0) | |||
basePoints[2] = New PointF(0, h / 2) | |||
basePoints[3] = New PointF(-w / 2, 0) | |||
For i = 0 To 3 | |||
Dim xRot As Float = basePoints[i].X * Cos(Rotazione) - basePoints[i].Y * Sin(Rotazione) | |||
Dim yRot As Float = basePoints[i].X * Sin(Rotazione) + basePoints[i].Y * Cos(Rotazione) | |||
points[i] = New PointF(cx + xRot, cy + yRot) | |||
Next | |||
With Paint | |||
<FONT Color=gray>' ''Disegna il rombo:''</font> | |||
.Brush = Paint.Color(Color.Black) | |||
.LineWidth = 2 | |||
.MoveTo(points[0].X, points[0].Y) | |||
For i = 1 To 3 | |||
.LineTo(points[i].X, points[i].Y) | |||
Next | |||
.LineTo(points[0].X, points[0].Y) | |||
.Stroke | |||
<FONT Color=gray>' ''Disegna il punto nero al centro:''</font> | |||
.Ellipse(cx - r, cy - r, 2 * r, 2 * r) | |||
.Fill | |||
End With | End With | ||
End | End | ||
Versione attuale delle 18:48, 10 ago 2025
Di seguito mostreremo un possibile codice per ruotare un Rombo disegnato in una DrawingArea.
Private DrawingArea1 As DrawingArea Private Tmr As Timer Private Const ScalaRaggio As Float = 0.2 ' Scala del raggio (dimensione del Rombo) Private Rotazione As Float ' Angolo di rotazione in radianti Public Sub Form_Open() With Me .Move(0, 0, Screen.AvailableWidth, Screen.AvailableHeight) .Arrangement = Arrange.Fill End With With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" .Background = Color.Lighter(Color.Yellow) End With Tmr = New Timer As "Tmr" Tmr.Delay = 30 ' circa 33 FPS Tmr.Start() End Public Sub DrawingArea1_Draw() Dim cx As Float = DrawingArea1.W / 2 Dim cy As Float = DrawingArea1.H / 2 Dim w As Float = DrawingArea1.W * 0.4 Dim h As Float = DrawingArea1.H * 0.3 Dim r As Float = 5 Dim points As New PointF[4] Dim i As Integer Dim basePoints As New PointF[4] basePoints[0] = New PointF(0, -h / 2) basePoints[1] = New PointF(w / 2, 0) basePoints[2] = New PointF(0, h / 2) basePoints[3] = New PointF(-w / 2, 0) For i = 0 To 3 Dim xRot As Float = basePoints[i].X * Cos(Rotazione) - basePoints[i].Y * Sin(Rotazione) Dim yRot As Float = basePoints[i].X * Sin(Rotazione) + basePoints[i].Y * Cos(Rotazione) points[i] = New PointF(cx + xRot, cy + yRot) Next With Paint ' Disegna il rombo: .Brush = Paint.Color(Color.Black) .LineWidth = 2 .MoveTo(points[0].X, points[0].Y) For i = 1 To 3 .LineTo(points[i].X, points[i].Y) Next .LineTo(points[0].X, points[0].Y) .Stroke ' Disegna il punto nero al centro: .Ellipse(cx - r, cy - r, 2 * r, 2 * r) .Fill End With End