|
||||
|
||||
|
Capitolo 3Sistema solare
Questa invece è realizzata disegnando direttamente sulla form ed utilizzando i metodi standard dell'oggetto Canvas di Delphi. A parte il Panel allineato a destra sulla form, che ha il suo usuale colore, tutta l'area client della form è stata resa nera (proprietà Color = clBlack) già in fase di progettazione tramite l'Object Inspector. Inserendo nei due Edit il valore del semiasse maggiore di un pianeta e la sua eccentricità, il programma disegna l'ellisse che rappresenta la sua orbita. Ripetendo la cosa per tutti i pianeti si ottiene un'immagine completa delle orbite dei pianeti del sistema solare (in realtà per una rappresentazione realistica sarebbe necessario utilizzare un numero decisamente maggiore di parametri). Ecco il listato: procedure TFormSistemaSolare.ButtonDisegnaClick(Sender: TObject);
const
sc = 40;
var
a, b, c, e: Double;
w, h, x0, y0: Integer;
begin
a:=StrToFloat(EditA.Text);
e:=StrToFloat(EditE.Text);
c:=e*a; b:=Sqrt(Sqr(a)-Sqr(c));
w:=ClientWidth-Panel.Width; h:=ClientHeight;
x0:=w div 2; y0:=h div 2;
Canvas.Pen.Color:=clBlack;
Canvas.Brush.Color:=clYellow;
Canvas.Brush.Style:=bsSolid;
Canvas.Ellipse(x0-5, y0-5, x0+6, y0+6);
Canvas.Pen.Color:=clWhite;
Canvas.Brush.Style:=bsClear;
Canvas.Ellipse(x0-Round((a-c)*sc), y0-Round(b*sc),
x0+Round((a+c)*sc), y0+Round(b*sc));
end;
Letti i valori di a ed e vengono calcolati c e b. Poi usando le proprietà ClientWidth e ClientHeight, che forniscono la larghezza e l'altezza dell'area client della form, viene determinato lo spazio che rimane libero e non coperto dal Panel. Viene calcolato il centro di questo spazio (x0,y0), che servirà per apportare un'opportuna traslazione al disegno. Viene disegnato il sole nel centro (raggio 5 pixel) ed infine l'ellisse, che però non viene riempita con il Brush (Style = bsClear).
|
|||
|
||||