Kui soovime funktsiooni graafikut näidata vahemikus 1<x<4, siis pole
võimalik võtta ühte ühikut graafikul üheks punktiks ekraanil. Selleks, et
midagi ka näha oleks, peab ekraanipunkte olema enam. Kui praegusel juhul
panna üks ekraanipunkt näiteks iga 0,01 graafikuühiku kohta, s.t, et
ekraanipunktid oleksid graafiku kohtades 1,00; 1,01; 1,02 .... 4,00 siis
tuleks kokku umbes kolmsada punkti, mis on ekraanil juba täiesti märgata.
Et 0,01 võrra üksteisest erinevad graafikukohad erineksid ekraanil terve
punkti võrra, tuleb nad ekraanile panemiseks korrutada 1/(0,01)=100ga.
Saame punktid 100, 101, 102 .. 400, mis on ekraanil täiesti olemas. Kui
soovime, et joon hakkaks ekraanil peale x-punktist 70, siis tuleb iga
punkti x-koordinaadist lahutada 30.
Ekraanil alustamise punkti määramiseks on ka parem võimalus. Kuna me
tahame, et graafikut hakataks näitama alates kohast 1, siis piisab, kui me
kasutame kaugust kohast 1, ehk praegusel juhul xekraanil=(xgraafikul-1)*100,
üldisemal juhul aga
xekraanil=(xgraafikul-x_minimaalne_väärtus)*mitu_punkti_ekraanil_ühe_ühiku_jaoks_graafikul.
Juhul, kui me soovime, et joon ei hakkaks mitte ekraani vasakust servast,
vaid mingi arv punkte kaugemalt, siis tuleb see arv x ekraanikoordinaadile
otsa liita.
Samuti tuleb y-teljel arvutada, kuid kuna ekraanil on y-telje numbrid ülalt
alla, tuleb alt üles graafiku saamiseks saadud kaugus ekraanipunktides
lahutada ekraanipunktist, mis on ekraani all servas. Näiteks:
yekraanil=400-(ygraafikul-ymin)*koefitsent.
Kui graafikul hõlmab x 3 ühikut ning ekraanil 300 punkti, siis tuleb
kofitsent 300/3 ehk 100. Kui aga graafikul tahame näidata teljest 6000
ühikut ning ekraanil ikkagi 300, tuleb koefitsendiks 300/6000 ehk 0,05.
Üldisemalt telje koefitsent on
pikkus ekraanipunktides/pikkus graafikuühikutes ehk koefitsentx=(xemax-xemin)/(xmax-xmin) ning
koefitsenty=(yemax-yemin)/(ymax-ymin).
Programm näeks välja järgmine:
program joonis;
uses graph;
var
exmin, exmax, eymin, eymax, ex, ey: integer; {ekraani koordinaadid}
xmin, xmax, ymin, ymax, x, y: real; {punkt tasandil}
koefitsentx, koefitsenty: real;
samm: real;
i: integer;
{$I graafika.pas}
procedure alusta;
begin
exmin:=10; exmax:=getmaxx-10;
eymin:=10; eymax:=getmaxy-10;
xmin:=0; xmax:=30;
ymin:=-2; ymax:=2;
koefitsentx:=(exmax-exmin)/(xmax-xmin);
koefitsenty:=(eymax-eymin)/(ymax-ymin);
end;
begin
KaivitaGraafika;
alusta;
samm:=(xmax-xmin)/300;
for i:=1 to 300 do begin
y:=sin(x);
ex:=round(exmin+(x-xmin)*koefitsentx);
ey:=round(eymax-(y-ymin)*koefitsenty);
putpixel(ex, ey, white);
x:=x+samm;
end;
readln;
CloseGraph;
end.