Ruotare un rombo in una DrawingArea
Vai alla navigazione
Vai alla ricerca
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