189
DrawPoIy процедурасы сыну нүктесінің координаталары бойынша, еркін сынық сызық салады.
Procedure DrawPoly(N: Word; var Points)
мұндағы N – екі шеткі нүктемен бірге алғандағы сыну нүктелері-нің саны; Points – сыну нүктелерінің координатасы көрсетілген, Pointtype типті айнымалы.
Сыну нүктелерінің координатасы Word типті екі мəн арқы-лы беріледі: біріншісі көлденең, екіншісі тік координатасы. Олар үшін модульде анықталған келесі типті қолдануға болады:
type
Pointtype=record
х, у: Word
end;
Сызу кезінде ағымдағы түс пен түзу стилі қолданылады. Осы процедураның көмегімен экранға синустың графигін саламыз:
Uses Graph;
const
N=100;{График нүктелерінің саны}
var
d, r, e: Integer;
array [O..N+1] of Pointtype;k : Word;
begin
{Графиканы іске қосамыз} d:=Detect;InitGraph(d, r, ‘’); e:=GraphResult;
if e <> grOk then WriteLn(GraphErrorMsg(e))
else begin
{График координаталарын есептейміз}
for k:=0 to N do with m[k] do begin
x:=trunc(k*GetMaxX/N);
у:=trunc(GetMaxY*(-sin(2*Pi*k/N)+1)/2); end;
{Графикті түзу сызықпен аяқтаймыз}
190
m[succ(N)].x:=m[0].x;
m[succ(n)].y:=m[0].у;
DrawPoly(N + 2, m);
ReadLn;
CloseGraph
end
end.
Бұл мысалда, көлденең сызық сызу үшін сынық сызықтың бастапқы жəне соңғы нүктелерін біріктіреміз. Сыну нүктелері-нің саны N Word типті өрнек болғанымен, процедура ішінде бұл параметрге қолданылатын буфер жадысының көлеміне бай-ланысты шектеулер қойылады. Сіз бұны алдыңғы мысалдағы N өзгерту арқылы байқауыңызға болады: егер N=678 болса, онда график экранға шықпайды, ал GraphResult функциясына – 6 мəні қайтарылады (аудандарды көру үшін жады көлемі жетпейді). Сонымен, бұл программа үшін сыну нүктелерінің саны 679 аспауы кеек. Алайда, төмендегі программа үшін сыну нүктелерінің саны
Бұл программада сынық сызық бірінің үстіне бірі бірнеше рет сызылатын диагональ түзулер түрінде берілген.
Uses Graph;
const
N=510;{Экрандағы диагональ түзулер көрініп
тұратын шекті мəн }
var
d,k: Integer;
Coo: array [1..N] of Pointtype; begin
d:=Detect;InitGraph(d,k,’ ‘) ; for k:=1 to N do with Coo[k] do
if odd(k) then
begin
X:=0;
Y:=0
end
else
begin
191
X:=GetMaxX;
Y:=GetMaxY
end;
DrawPoly(N,Coo);
ReadLn;
CloseGraph
end.
Достарыңызбен бөлісу: |