|
||||
|
||||
|
Capitolo 3Retta esplicitaCome si può constatare dall'applicazione precedente, disegnare in scala utilizzando solamente coordinate intere richiede un duro lavoro di programmazione. Per sveltire lo sviluppo di questo e dei programmi seguenti faremo uso di un nuovo componente Delphi costruito appositamente per la rappresentazione di punti, segmenti, circonferenze, ellissi su di un grafico cartesiano, utilizzando coordinate reali, anziché intere. Il nuovo componente visuale Oxy è stato progettato proprio con questo scopo: facilitare l'utilizzo della grafica e permettere a chi sviluppa il programma di concentrarsi sul problema da risolvere e di non perdersi in calcoli sulla scala di rappresentazione del grafico. Vediamo come installare il nuovo componente nella palette di Delphi.
Estrarre i due file contenuti nel file 3_06_toxy_scuola.zip
nella cartella C:\Programmi\Borland\Delphi 2.0\LIB dove sono
contenuti gli altri componenti di Delphi. Quindi in Delphi accedere al menu:
Component - Install - Add - Browse - selezionare
OxyScuola.pas dalla cartella suddetta - Apri - OK. Dopo
pochi istanti il componente Oxy comparirà nella linguetta Samples
visualizzando l'icona Vediamone le proprietà, i metodi e gli eventi. Proprietà pubblicate (modificabili dall'Object Inspector):
Proprietà pubbliche (modificabile sono da programma):
Metodi:
Eventi:
Come si può vedere i nomi o sono autoesplicativi o ricalcano esattamente quelli dei metodi e delle proprietà dell'oggetto standard Canvas di Delphi. Oxy possiede anch'esso un Canvas, che però opera con coordinate reali (Double) invece che intere. Inoltre ciò che viene disegnato su di esso è permanente, quindi anche se la form viene momentaneamente coperta da altre finestre, l'immagine non viene cancellata. Per cancellare è necessario chiamare il metodo Clear. L'accesso in lettura ai pixel avviene tramite la funzione GetPixel, che restituisce il colore del pixel posto alle coordinate reali (x,y), e in scrittura tramite la procedura SetPixel, che imposta il colore passato come terzo parametro del punto posto alle coordinate reali (x,y). I metodi MoveTo e LineTo funzionano come i loro equivalenti interi, mentre Line, che disegna il segmento che va dal punto (x1,y1) al punto (x2,y2), è un metodo nuovo. La sintassi di Rectangle è la stessa, anche se questa volta il rettangolo non è 1 pixel più piccolo per ogni dimensione. Vi è il nuovo metodo Circle, che disegna un cerchio con centro (x,y) e raggio r, mentre il metodo Ellipse è stato modificato perché ora disegna un ellisse di centro (x,y) e di semiassi a e b. Infine TextOut funziona come il suo equivalente intero. Le proprietà Pen, Brush e Font sono identiche a quelle del Canvas standard di Delphi. La proprietà Bitmap permette di utilizzare tutti i metodi associati all'oggetto omonimo; per esempio il grafico può essere così facilmente salvato su disco con l'istruzione: Oxy.Bitmap.SaveToFile('nomefile.bmp');
o caricato in memoria con: Oxy.Bitmap.LoadFromFile('nomefile.bmp');
La form è costituita da un Panel allineato a sinistra (Align = alLeft) contenente una Label di commento con l'equazione della retta in forma esplicita, altre due Label "m" e "q" con a fianco due Edit, che conterranno rispettivamente il coefficiente angolare e il termine noto della retta, e 2 Button che serviranno a cancellare e a disegnare il grafico. A destra inseriamo il componente Oxy allineato all'area client (Align = alClient) in modo che occupi tutto lo spazio disponibile. Impostiamo ora le proprietà: vediamo che cambiando i valori (e premendo Invio) il componente modifica immediatamente il suo aspetto visualizzando in anteprima quale sarà il suo aspetto finale in base ai valori scelti per la scala, etc.
Passiamo ora al listato, che è di una semplicità quasi incredibile considerando l'output grafico che è in grado di fornire. procedure TFormRettaEsplicita.ButtonDisegnaClick(Sender: TObject); var m, q, x1, y1, x2, y2: Double; begin m:=StrToFloat(EditM.Text); q:=StrToFloat(EditQ.Text); x1:=Oxy.xMin; y1:=m*x1+q; x2:=Oxy.xMax; y2:=m*x2+q; Oxy.Pen.Color:=clBlue; Oxy.Line(x1, y1, x2, y2); end; Vengono letti i valori di m e q; vengono assegnati ad x1 e x2 i limiti sinistro e destro della finestra grafica visualizzata da Oxy; con questi valori vengono calcolati i valori corrispondenti di y1 e y2; infine viene tracciato il segmento che va da (x1,y1) a (x2,y2) in colore blu. Segue poi la procedura associata al bottone Cancella, che si spiega da sola. procedure TFormRettaEsplicita.ButtonCancellaClick(Sender: TObject); begin Oxy.Clear; end;
|
|||
|
||||