Home

A scuola di Delphi

www.gpeano.org 

Introduzione · Capitolo 1 · Capitolo 2 · Capitolo 3 · Capitolo 4 · Capitolo 5 · Download 

Sommario
Blocco note
Tavola gradi-rad
Primitive grafiche
Giochi grafici
Assi cartesiani
Retta esplicita
Fascio improprio
Circonferenza
Ellisse
Sistema solare
Parabola
Iperbole
 

Capitolo 3

Sistema solare

Questa applicazione si differenzia da quelle che stiamo esaminando, le quali fanno tutte uso del componente Oxy.

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).

 3.10 - Sistema solare