Predisposizioni per tracciamento grafico in coord relative

Si suppone di usare un componente image1 nel form1.

//-----------------------------------------------------------------------

type
  Trc=record
    minx,maxx,miny,maxy:real;
    px,py:integer;
  end;

//-----------------------------------------------------------------------

var
  Rc:Trc;

//-----------------------------------------------------------------------

function ymap(y:real):integer;
begin
  result:=round(Rc.py*(y-Rc.maxy)/(Rc.miny-Rc.maxy));
end;
 

function xmap(x:real):integer;
begin
  result:=round(Rc.px*(x-Rc.minx)/(Rc.maxx-Rc.minx));
end;

//-----------------------------------------------------------------------

procedure setcoord(px,py:integer; minx,maxy,maxx,miny:real);
begin
  Rc.px:=px;
  Rc.py:=py;
  Rc.minx:=minx;
  Rc.maxx:=maxx;
  Rc.miny:=miny;
  Rc.maxy:=maxy;
end;

//-----------------------------------------------------------------------

procedure assey(x:real);
begin
  form1.image1.canvas.moveto(xmap(x),ymap(Rc.miny));
  form1.image1.canvas.lineto(xmap(x),ymap(Rc.maxy));
end;
 

procedure assex(y:real);
begin
  form1.image1.canvas.moveto(xmap(Rc.minx),ymap(y));
  form1.image1.canvas.lineto(xmap(Rc.maxx),ymap(y));
end;

//---------------------------------------------------------------------
// DISEGNA funzione
//-----------------------------------------------------------------------

procedure disegnafunzione;
var minx,maxx,x,y,segm:real;
    h,punti:integer;
begin
with form1 do begin

  // definisce coordinate relative in area grafica
  setcoord(image1.width,image1.height, minimo valore x , massimo valore y ,
                                      massimo valore x , minimo valore y);

  //disegna assi passanti per lo zero
  image1.canvas.pen.color:=clblue;
  image1.canvas.pen.style:=psdot;
  assey(0);
  assex(0);

  //imposta penna per tracciamento funzione
  image1.canvas.pen.color:=clred;
  image1.canvas.pen.style:=pssolid;

  //imposta estremi x e numero di punti
  minx:=minima x funzione;
  maxx:=massima x funzione;
  punti:=numero punti funzione;

  //tracciamento primo punto
  segm:=(maxx-minx)/(punti-1);
  x:=minx;
  y:= funzione ;
  image1.canvas.moveto(xmap(x),ymap(y));

  //tracciamento altri punti funzione
  for h:=2 to punti do
  begin
    x:=(minx+segm*(h-1));
    y:= funzione ;
    image1.canvas.lineto(xmap(x),ymap(y));
  end;

end;