Sul tracciamento dei diagrammi in VB6.
In questo documento sono illustrati una serie di brevi programmi, in Visual Basic 6,
utili per la presentazione grafica delle funzioni operative e delle caratteristiche
di direttivitā del sonar,in particolare:
A-reticolo in coordinate cartesiane in scala doppio lineare.
B-reticolo in coordinate cartesiane in scala logaritmico/lineare a tre decadi.
C-reticolo in coordinate cartesiane in scala lineare/logaritmica a due decadi.
D-reticolo in coordinate cartesiane in scala lineare/logaritmica a tre decadi.
E-reticolo in coordinate cartesiane in scala doppio logaritmica a due decadi.
F-reticolo in coordinate polari in scala doppio lineare.
G-reticolo in coordinate polari in scala doppio lineare, presentazione di funzione.
H-reticolo in coordinate polari in scala lineare/logaritmica.
I programmi sono accompagnati da tracciati dimostrativi che aiutano alla scelta in base al
tipo di utilizzo. Tutte le funzioni a calcolo, che implicano computazioni logaritmiche,
devono essere, ovviamente, f(x) > 0.
|
A -reticolo in coordinate cartesiane in scala lineare.
Listato del programma con esempio per il tracciamento di una parabola (figura 1):
Rem routine per il tracciamento del reticolo cartesiano
Private Sub Form_Paint()
For x = 0 To 6400 Step 320
For y = 0 To 6400 Step 40
PSet (x, y), 7
Next y
Next x
For y = 0 To 6400 Step 320
For x = 0 To 6400 Step 42
PSet (x, y), 7
Next x
Next y
Line (3200, 0)-(3200, 6400)
Line (0, 3200)-(6400, 3200)
PSet (46000 * t, 4000 - 1200 * Y1 / 2), vbRed
PSet (46000 * t, 4000 - 1200 * 0), vbRed
PSet (46000 * t, 2000 - 1200 * Y2 / 2), vbBlack
PSet (46000 * t, 2000 - 1200 * 0), vbBlack
' funzione da tracciare Y = 0.5 X2 + 3 X + 2
e = 10
For x = -e To e Step 0.001
Y = 0.5 * (x ^ 2) + 3 * x + 2
PSet (3200 + (3200 / e) * x, 3200 - (3200 / e) * Y), vbRed ' funzione grafica
Next x
End Sub
|
|
B -reticolo in coordinate cartesiane in scala logaritmico/lineare a tre decadi.
Listato del programma con esempio di tracciamento funzione logaritmica (figura 2).
Disporre su di un Label i valori di ascissa 1 ; 10 ; 100 ; 1000
'COSTRUZIONE RETICOLO LOGARTMICO LINEARE
Private Sub Form_Paint()
For y = 200 To 6600 Step 40
For a = 0 To 2
For x = 1 To 10 Step 1
s = 3066.7
PSet (a * (s * Log(10) / Log(10)) + 400 + s * Log(x) / Log(10), y), vbBlack
Next
Next
Next
For y = 200 To 6600 Step 320
For x = 400 To 9600 Step 60
PSet (x, y)
Next x
Next y
Line (400, 6600)-(9600, 6600), vbBlack
Line (400, 200)-(400, 6600), vbBlack
' funzione da tracciare Y = Log x ( per logaritmi a base 10 )
For x = 1 To 1000 Step 0.01
Y = Log(x) / Log(10) ' per logaritmi a base e
'funzione grafica
PSet (400 + (3066.7 * Log(x) / Log(10)), 6600 - 2133.33 * Y), vbRed
Next
End Sub
|
|
C -reticolo in coordinate cartesiane in scala lineare/logaritmica a due decadi.
Listato del programma con esempio di tracciamento di una retta (figura 3).
Disporre su di un Label i valori di ordinata 1 ; 10 ; 100.
Private Sub Form_Paint()
For x = 500 To 9700 Step 60
For a = 0 To 1
For c = 1 To 10
k = 3200
PSet (x, (6600 - (a * (k * Log(10) / Log(10)) + k * Log(c) / Log(10)))), 7
Next
Next
Next
For x = 500 To 9700 Step 460
For y = 200 To 6600 Step 40
PSet (x, y), 7
Next y
Next x
Line (500, 6600)-(9700, 6600)
Line (500, 200)-(500, 6600)
For x = 0 To 20 Step 0.001
' funzione da tracciare Y = 5 X + 1
y = (5 * x + 1)
'funzione grafica
PSet (500 + (9200 * x / 20), 6600 - 3200 * (Log(y) / Log(10))), 7
Next
End Sub
|
|
D -reticolo in coordinate cartesiane in scala lineare logaritmica a tre decadi.
Listato del programma con esempio di tracciamento di una funzione esponenziale (figura 4).
Disporre su di un Label i valori di ordinata 1 ; 10 ; 100 ; 1000
Private Sub Form_Paint()
For x = 500 To 9700 Step 60
For a = 0 To 2
For c = 1 To 10
k = 2130
PSet (x, (6600 - (a * k + k * Log(c) / Log(10)))), 7
Next
Next
Next
For x = 500 To 9700 Step 460
For y = 200 To 6600 Step 40
PSet (x, y), 7
Next y
Next x
Line (500, 6600)-(9700, 6600)
Line (500, 200)-(500, 6600)
For x = 1 To 100 Step 0.01
'funzione da tracciare Y = X 1 . 5
Y = x^1.5
'funzione grafica
PSet (500 + 92 * x, 6600 - 2130 * (Log( Y )) / Log(10)), vbBlue
Next
End Sub
|
|
E -reticolo in coordinate cartesiane in scala doppio logaritmica a due decadi.
Listato del programma con esempio di tracciamento di una funzione iperbolica
(figura 5).
Disporre su due Label, in ascisse e ordinate, di valori 1 ; 10 ; 100 .
Private Sub Form_Paint()
For Y = 200 To 6600 Step 40
For a = 0 To 1
For x = 1 To 10
s = 4600
PSet (a * s + 500 + s * Log(x) / Log(10), Y), vbBlack
Next x
Next a
Next Y
For x = 500 To 9700 Step 60
For a = 0 To 1
For c = 1 To 10
k = 3200
PSet (x, (6600 - (a * (k * Log(10) / Log(10)) + k * Log(c) / Log(10)))), vnblack
Next c
Next a
Next x
Line (500, 6600)-(9700, 6600), vbBlack
Line (500, 200)-(500, 6600), vbBlack
For x = 1 To 100 Step 0.01
Y = 100 / x ' funzione da tracciare
'funzione grafica
PSet (500 +(4600*Log(x)/Log(10)), 6600 - 3200 * (Log(Y) / Log(10))), vbRed
Next
End Sub
|
|
F -reticolo in coordinate polari in scala doppio lineare, prsentazione di tabella.
Listato del programma con esempio di tracciamento relativo ad una serie di 36 dati,
uno ogni 10°, inseriti nella matrice md(dato) (figura 6).
Disporre di Label negli assi ortogonali di valori 0° ; 90° ; 180° ; 270°.
Private md(300) As Integre 'matrice dati da presentare
Private arg(300) 'matrice angoli del tracciato
Private Sub Form_Paint()
a = 0
r = 0
For a = 1 To 10
r = 300 + r
For X = -r To r
Y = Sqr(Abs(r ^ 2 - X ^ 2))
PSet (6000 + X, 4000 + Y), vbYellow
Y = Sqr(Abs(X ^ 2))
Next X
For X = -r To r
Y = -Sqr(Abs(r ^ 2 - X ^ 2))
PSet (6000 + X, 4000 + Y), vbYellow
Y = -Sqr(Abs(X ^ 2))
Next
Next a
For alfa = 0.0001 To 360 Step 10
For X = -3000 To 3000
Y1 = (Tan(alfa * 0.017453293) * X)
If Y1 > r * Sin(alfa * 0.017453293) Then Y1 = 0
If Y1 < -r * Sin(alfa * 0.017453293) Then Y1 = 0
PSet (6000 + X, 4000 + Y1), vbYellow
PSet (6000 + X, 4000), vbYellow
Next X
Line (6000, 1000)-(6000, 7000)
Next alfa
'MATRICE md(dato) CONTENENTE I DATI DA PRESENTARE
md(0) = 100
md(1) = 150
md(2) = 200
md(3) = 230
md(4) = 300
md(5) = 280
md(6) = 350
md(7) = 400
md(8) = 450
md(9) = 420
md(10) = 450
md(11) = 400
md(12) = 300
md(13) = 250
md(14) = 200
md(15) = 180
md(16) = 190
md(17) = 170
md(18) = 160
md(19) = 180
md(20) = 160
md(21) = 150
md(22) = 250
md(23) = 300
md(24) = 400
md(25) = 480
md(26) = 500
md(27) = 500
md(28) = 480
md(29) = 400
md(30) = 300
md(31) = 350
md(32) = 280
md(33) = 290
md(34) = 170
md(35) = 150
For c = 0 To 36
arg(c) = 90 - (10 * c)
Next c
For xx = 0 To 36
'CALCOLO PER IL POSIZIONAMENTO DEI PUNTI
X = 5 * md(xx) * Cos(arg(xx) * 0.017453293)
Y = (Tan(arg(xx) * 0.017453293) * X)
Circle (6000 + X, 4000 - Y), 40
'CALCOLO PER IL TRACCIAMENTO DEI SEGMENTI D'UNIONE TRA I PUNTI
'(il calcolo si avvale anche delle variabili X ed Y
'calcolate nelle istruzioni superiori)
X1 = 5 * md(xx + 1) * Cos(arg(xx + 1) * 0.017453293)
Y1 = (Tan(arg(xx + 1) * 0.017453293) * X1)
Line (6000 + X, 4000 - Y)-(6000 + X1, 4000 - Y1)
Next xx
End Sub
|
|
G -reticolo in coordinate polari in scala doppio lineare, presentazione di funzione.
Listato del programma con esempio di tracciamento relativo ad una funzione di direttivitā
teorica del tipo y = | Sen(x) / x | (figura 7).
Disporre di Label negli assi ortogonali di valori 0° ; 90° ; 180° ; 270°.
Private Sub form_paint()
'ISTRUZIONI PER TRACCIARE I RAGGI POLARI OGNI 10°
For xy = 0 To 360 Step 10
X = 6000
Y = 4000
X1 = 60 * 50 * Cos((90 - xy) * 0.017453293)
Y1 = (Tan((90 - (xy)) * 0.017453293) * X1)
Line (6000, 4000)-(6000 + X1, 4000 - Y1), vbBlack
Next xy
'ISTRUZIONI PER TRACCIARE GLI Ao = 10 CERCHI
Ao = 0
ro = 0
For Ao = 1 To 10
ro = 300 + ro
For X = -ro To ro Step 0.1
Y = Sqr(Abs(ro ^ 2 - X ^ 2))
PSet (6000 + X, 4000 + Y), vbBlack
PSet (6000 + X, 4000 - Y), vbBlack
Next X
Next Ao
'ISTRUZIONI PER I RAGGI ORTOGONALI
Line (6000, 7000)-(6000, 1000), vbRed
Line (3000, 4000)-(9000, 4000), vbRed
'ISTRUZIONI PER L'INSERIMENTO DELLA FUNZIONE DA PRESENTARE
For xx = 0 To 360
lobo = 15 ' nell'esempio governa la larghezza del lobo
beta = (0.001 + xx - 180) / lobo
md = Abs(Sin(beta) / (beta)) ' funzione da presentare
X = 3000 * md * Cos((270 - xx) * 0.017453293)
Y = 3000 * md * Sin((270 - xx) * 0.017453293)
Circle (6000 + X, 4000 - Y), 10, vbBlue
Next xx
End Sub
|
|
H-reticolo in coordinate polari in scala lineare/logaritmica.
Listato del programma con esempio di tracciamento relativo ad una funzione adatta alla prova
della scala logaritmica in coordinate polari:
Y = ( 1 + ( 2 Sin( 0.0174 X / 2) + (Cos( 5 X 0.0174) )) 2 ) (figura 8).
Disporre di Label negli assi ortogonali di valori 0° ; 90° ; 180° ; 270°.
Private Sub form_paint()
'ISTRUZIONI PER TRACCIARE I RAGGI POLARI OGNI 10°
For xy = 0 To 360 Step 10
X = 6000
Y = 4000
X1 = 3000 * Cos((90 - xy) * 0.017453293)
Y1 = 3000 * Sin((90 - xy) * 0.017453293)
Line (6000, 4000)-(6000 + X1, 4000 - Y1), vbBlack
Next xy
'LA SCALA LOGARITMICA é VALIDA SOLTANTO DA 1 a 10, NON č MOLTIPLICABILE
'le funzioni da rappresentare se hanno il valore max superiore
'a 10 devono essere divise per opportuni coefficienti
For Ao = 1 To 10 Step 1
aa = aa + 1
md = Log(aa) / Log(10)
For xx = 0 To 360 Step 0.1
X = 3000 * md * Cos((90 - xx) * 0.017453293)
Y = 3000 * md * Sin((90 - xx) * 0.017453293)
PSet (6000 + X, 4000 - Y), vbBlack
Next
Next
'ISTRUZIONI PER I RAGGI ORTOGONALI
Line (6000, 7000)-(6000, 1000), vbRed
Line (3000, 4000)-(9000, 4000), vbRed
'ISTRUZIONI PER LA PRESENTAZIONE DELLA FUNZIONE
For xx = 0 To 360
md = Log(1 + (2 * Sin(xx * 0.0174 / 2) + (Cos(5 * xx * 0.0174))) ^ 2) / Log(10)
X = 3000 * md * Cos((270 - xx) * 0.017453293)
Y = 3000 * md * Sin((270 - xx) * 0.017453293)
Circle (6000 + X, 4000 - Y), 10, vbBlue
Next xx
End Sub
|
|