Calcolo e rappresentazione grafica in una DrawingArea del Seno e del Coseno
Da Gambas-it.org - Wikipedia.
Mostriamo di seguito un possibile codice per calcolare e disegnare su una DrawingArea il Seno e il Coseno, avendo noti il raggio di una ipotetica circonferenza e un angolo interno adiacente all'ipotenusa.
Private DrawingArea1 As DrawingArea Private Const ANGOLO As Single = 0.0 ' L'angolo, espresso in gradi, di cui si intende trovare il "Seno". Private raggio As Single ' La lunghezza del raggio dell'ipotetica circonferenza. Private w2 As Single Private h2 As Single Private sn As Single Private cs As Single Private x As Single ' La lunghezza del "Coseno" da calcolare. Private y As Single ' La lunghezza del "Seno" da calcolare. Private c As Short Private grd As String Private dis As Short = -10 Public Sub _new() With Me .W = 600 .H = 600 .Arrangement = Arrange.Fill End With With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" .Background = Color.White End With End Public Sub Form_Arrange() w2 = DrawingArea1.W / 2 h2 = DrawingArea1.H / 2 raggio = DrawingArea1.W / 3 End Public Sub Form_Open() Me.Show ' Avvia un ciclo infinito: Do cs = Cos(Rad(ANGOLO + c)) sn = Sin(Rad(ANGOLO + c)) grd = CStr(ANGOLO + c) & "°" ' Calcola la lunghezza del "Coseno" = 𝜌 cos 𝜃 : x = raggio * (cs) ' Calcola la lunghezza del "Seno" = 𝜌 sen 𝜃 : y = raggio * (sn) DrawingArea1.Refresh Select Case c Case 91 To 180 grd = CStr(180 - c) & "°" Case 181 To 270 grd = CStr(c - 180) & "°" dis = 20 Case 271 To 360 grd = CStr(360 - c) & "°" If c == 360 Then c = 0 dis = -10 Endif End Select Wait 0.2 Inc c Loop End Public Sub DrawingArea1_Draw() With Paint .DrawText("ρ = " & CStr(raggio) & " pixel", 10, 10, .Font.TextWidth("X"), .Font.TextHeight("X"), Align.Normal) .DrawText(grd, w2, h2 - dis, .Font.TextWidth(grd), .Font.TextHeight(grd), Align.Normal) .LineWidth = 2.4 .MoveTo(w2, h2) .LineTo(w2 + x, h2 - y) .Stroke .LineWidth = 1.0 .Brush = .Color(Color.Red) .DrawText("Seno: " & "Rad = " & Format(sn, "0.000") & " ρ(sen θ) = " & Format(y, "#.0") & " pixel", 10, 15 + .Font.TextHeight("S"), .Font.TextWidth("Seno"), .Font.TextHeight("S"), Align.Normal) .MoveTo(w2 + x, h2) .LineTo(w2 + x, h2 - y) .Stroke .Brush = .Color(Color.Blue) .DrawText("Coseno: " & "Rad = " & Format(cs, "0.000") & " ρ(cos θ) = " & Format(x, "#.0") & " pixel", 10, 35 + .Font.TextHeight("C"), .Font.TextWidth("Coseno"), .Font.TextHeight("C"), Align.Normal) .MoveTo(w2, h2) .LineTo(w2 + x, h2) .Stroke .End End With End Public Sub Form_Resize() DrawingArea1.Resize(Me.W, Me.H) ' Fa sì che il raggio non sia mai superiore ad alcuna delle due dimensioni della "DrawingArea": raggio = Min(DrawingArea1.W, DrawingArea1.H) / 3 End