Differenze tra le versioni di "Calcolo e rappresentazione grafica in una DrawingArea del Seno e del Coseno"
Da Gambas-it.org - Wikipedia.
Riga 13: | Riga 13: | ||
Private dis As Short = -10 | Private dis As Short = -10 | ||
− | + | ||
+ | Public Sub _new() | ||
With Me | With Me | ||
Riga 24: | Riga 25: | ||
End With | End With | ||
− | + | End | |
− | + | ||
+ | Public Sub Form_Arrange() | ||
w2 = DrawingArea1.W / 2 | w2 = DrawingArea1.W / 2 | ||
Riga 32: | Riga 34: | ||
raggio = DrawingArea1.W / 3 | raggio = DrawingArea1.W / 3 | ||
− | + | End | |
− | + | ||
+ | Public Sub Form_Open() | ||
Me.Show | Me.Show | ||
Riga 65: | Riga 68: | ||
Loop | Loop | ||
− | + | End | |
− | + | ||
+ | Public Sub DrawingArea1_Draw() | ||
With Paint | With Paint | ||
Riga 95: | Riga 99: | ||
End With | End With | ||
− | + | End | |
+ | |||
− | + | Public Sub Form_Resize() | |
DrawingArea1.Resize(Me.W, Me.H) | DrawingArea1.Resize(Me.W, Me.H) | ||
Riga 104: | Riga 109: | ||
raggio = Min(DrawingArea1.W, DrawingArea1.H) / 3 | raggio = Min(DrawingArea1.W, DrawingArea1.H) / 3 | ||
− | + | End |
Versione attuale delle 11:34, 27 giu 2024
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