1 | class Diagramma extends Canvas { |
La classe Diagramma eredita le proprietà e i metodi della classe
Canvas, che in java rappresenta la finestra grafica.
2 | public void paint(Graphics g) { |
Quando si crea un'istanza della classe viene chiamato automaticamente il metodo
paint che riceve un oggetto
g di classe
Graphics
con il quale può
disegnare sulla finestra.
3 | int YAscisse, XOrdinate, AsseOrdinate, X, Y, y; |
4 | double scalaX, scalaY, t, Vu, derivata, dVu, tMax; |
Vengono dichiarate alcune variabili locali che servono per mantenere alcuni parametri, cioè la posizione degli assi cartesiani, i fattori di scala orizzontale e verticale, ecc...
5 | circuitoRC C = new circuitoRC(10.0, 0.00002); |
6 | Funzione f = new Funzione(C.leggiTau()*5); |
7 | tMax = C.leggiTau()*20; |
8 | scalaX=300.0/(tMax); |
9 | scalaY=200.0/25.0; |
Linea 5: Si crea un'istanza della classe
CircuitoRC dove sono descritti i parametri del circuito,
Linea 6: Si crea un'istanza della classe
Funzione nella quale è contenuta l'espressione della funzione,
Linea 7: Dall'istanza
C della classe
CircuitoRC si ottiene il valore della costante di tempo, e, moltiplicandola per 20, si stabilisce la durata dell'esperimento,
Linee 8÷9: si calcola il fattore di riduzione in scala, sulla base della larghezza e dell'altezza della finestra e dei valori massimi da rappresentare sui rispettivi assi.
10 | Vu=0.0; |
11 | derivata=(f.f(0)-Vu)/C.leggiTau(); |
12 | YAscisse=150; |
13 | AsseOrdinate=150; |
14 | XOrdinate=200; |
15 | g.setColor(Color.red); |
16 | g.drawLine(0,YAscisse,400,YAscisse); |
17 | g.drawLine(AsseOrdinate, 240,AsseOrdinate,0); |
Linea 10: si assegna la condizione iniziale (Vu=0 quando t=0),
Linea 11: Si calcola la tangente nel punto (t=0, Vu=0),
Linea 12÷14: si assegnano i valori alle posizioni degli assi cartesiani,
Linea 15: Si assegna il colore per disegnare gli assi,
Linee 16÷17: si disegnano gli assi cartesiani.
18 | for (t=0.0; t<=tMax; t+=C.leggidt()){ |
19 | X = (int) (scalaX*t); |
20 | y = (int) (f.f(t)*scalaY)+YAscisse; |
21 | g.setColor(Color.green); |
22 | g.drawLine(X,y,X,y); |
23 | g.setColor(Color.blue); |
24 | y=(int)(scalaY*Vu+YAscisse); |
25 | g.drawLine(X,y,X,y); |
26 | dVu = derivata*C.leggidt(); |
27 | Vu = Vu + dVu; |
28 | derivata=(f.f(t)-Vu)/C.leggiTau(); |
29 | } |
30 | } |
31 | } |
Linea 18: si inizia un ciclo in cui si fa variare il tempo
t da 0 al valore massimo con incrementi
dt
Linea 19: il valore del tempo, da rappresentare sull'easse delle ascisse viene moltiplicato per il fattore di scala orizzontale per ricavare la coordinata X del pixel da illuminare,
Linea 20: il valore della funzione di ingresso viene moltiplicato per il fattore di scala verticale per ottenere la coordinata Y del pixel da illuminare,
Linea 21: si imposta il colore con cui si disegna la funzione di ingresso,
Linea 22: il pixel viene disegnato,
Linea 23: si imposta il colore con cui si disegna la funzione di uscita (Vu),
Linea 24: si calcola la coordinata verticale in cui illuminare il pixel relativo al valore della funzione di uscita (la coordinata orizzontale è la stessa del pixel già illuminato),
Linea 25: si disegna il punto,
Linea 26: conoscendo la derivata della funzione nel punto t si calcola l'incremento della funzione nell'intervallo
dt,
Linea 27: l'incremento della funzione nell'intervallo
dt viene aggiunto al valore della funzione all'istante t e si ottiene il valore della funzione all'istante
t + dt.
Linea 28: Prima di ripetere un altro passo del ciclo si calcola il valore della derivata