Ruotare un rombo in una DrawingArea: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (5 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