6.1. Proceduri si functii p3k24kj
Circle
Procedura Circle deseneaza un cerc de centru si raza data; culoarea de desenare
este stabilita de procedura SetClolor. Procedura este stabilita astfel.
Procedure Circle (x, y:integer ; raza:word);
X si Y definesc coordonatele cercului
Raza defineste lungimea razei
Arc
Procedura Arc deseneaza un arc de cerc si este definita astfel:
Procedure Arc (x, y:integer;Ustrat, Ufinal:word);
Coordonatele cercului sunt definite de x si y, raza arcului de cerc este definita
de r, iar Ustrat si Ufinal reprezinta unghiul de inceput si de sfarsit
al arcului, valorile lor sunt date in grade, in sensul trigonometric.
Deci, daca Ustrat este 0, iar Ufinal este 360, atunci este de desenat un cerc
complet.
Elipse
Procedura elipse deseneaza un arc de elipsa si este definita astfel:
Procedure elipse (x,y:integer;Ustrat, ufinal:word;Xraza,Yraza:word);
X si Y reprezinta coordonatele cetrului.
Ustrat si Ufinal reprezinta unghiul de sfarsit al arcului de elipsa, in
grade, in sens trigonometric. Valorile Xraza si Yraza definesc raza orizontala
respectiv axa verticala a elipsei.
GeatArcCoords
Procedura GteArcCords returneaza centrul si coordonatele de inceput si
de sfrarsit ale ultimului arc desenat. Procedura este definita astfel:
Procedure GetArcCoords (var coordonare:ArcCoordsType);
Coordarc detip predefinit ArcCoordsTzpe va contine coordonatele centrului crcului
sau elipsei si cordonatele punctului de inceput si de sfarsit al arcului
. Tipulpredefinit ArcCordsTzpe este:
Type ArcCoordsType=record x,y: integer; AcentruS
Xstart, Ystart:integer Ainceputul arculuiS
Xend,Yend:ineteger Asfarsitu arculuiS
End;
PieSlice
Procedure PieSlince deseneza si hasureaza un sector de cerc si este definita
astfel:
Procedure PieSlice (x, y:integer; Ustart, Ufinal, r:word);
X si y Ufinal reprezinta unghiul de inceput si de sfarsit al sectorului,
iar r este raza.
Culoarea cercului este culoarea actuala, iar modelul de hasurare si culoare
de hasurare este definita este definita de procedurile SetFillStyle sau SetFillPattern.
Sector
Procedura Sector deseneaza si hasureaza un sector de elipsa si este definita
astfel:
Procedure Sector (x,y:integer; Ustar, Ufinal, Xraza, Yraza:word);
X si y reprezinta coordonatele centrului;
Ustart, Ufinal reprezinta unghiul de inceput si de sfarsitul al
sectorului de elipsa in grade, in sens trigonometric. Variabilele
Xraza si Yraza definesc axa orizontala respectiv axa verticala a elipsei. Culoarea
este culoarea actuala, iar modelul de hasurare este definit de procedurile SetFillStyle
si SetFillPattern.
FillEllipse
Procedura FillEllipse deseneaza si hasureaza o elipsa si este definita astfel:
Procedure FillEllipse (x, y:integer;Xraza;Yraza:word); x,y reprezinta coordonatele centrului;
Xraza si Yraza reprezinta axa orizontala respectiv verticala a elipsei.
Culoarea elipsei este culoarea actuala, iar modelul si culoarea de hasurare
este definita de procedurile SetFillStyl sau SetFillPattern.
GetAspectRatio
Procedura GetAspectRatio determina dimensiunile maximale ale ecranului grafic.
Procedura se determina astfel:
Procedure GetAspectRatio (var xasp; vasp:word);
Xasp, yasp reprezinta valoarea maxima a abscisei si a ordonatei, adica rezolutia
efectiva a ecranului grafic. Din aceste valori se poate calcula raportul dimensional
xasp; yasp. Acest raport este utilizabil la „rotunjiri” necesare
la trasarea cercurilor, sectoarelor si arcelor de cerc.
SetAspectRetio
Procedura SetAspectRatio defineste raportul dimensional implicit. Procedura
se defineste astfel:
Procedure SetAspectRatio (xasp, yasp:word); xasp, yasp reprezinta valorile amxime pentru abscisa si ordonata. Cu aceste
valori definite, un cerc torsionat poate fi rectificat pe baza raportului dimensional
definti.
6.2. Aplicatie
Programul curbe realizeaza trasarea de cercuri, arcuri, elipse, sectoare de
cerc, sectoare de elipse.
Program curbe;
Uses crt, graph;
Var Raza, gd, dm:integer; ch: char;
Xasp, yasp:word;
Begin gd:=detect; initgraph (gd, gm,’c:\bp\bgi’); if graphresult<>grOk then halt (1); repeat outTextXY(11. 0. ’apasati’); outTextXY(10. 10. ’1-cerc 2-arc 3-elipsa 4-sector de cerc 5-sector elipsa
6-hasurarea elipsei);
OuttextXY(10. 470. ‘0-iesire’); ch:=readkey; case ch of
‘1’ :begin for raza:=1 to 5 do circle (100.100. raza*10); end;
‘2’ begin for raza:=1 to 5 do arc(200.200.0.90. raza* 10); end;
‘3’ begin elipse(300.100.0.360.30.50); end;
‘4’:begin pieslice(400.100.0.270.40); end;
‘5’:begin sector(getmaxx div 2. getmay div 2.0.45.50.50); getaspectratio(xasp, yasp); Asector circularS sector(getmaxx div 2. getmaxy div 2 180.135.50.50*longint(xasp) div yasp); Apunc
centratS end;
‘6’:begin fillellipse(100.350.50.50); getaspectration(xasp,yasp); Aelipsa circularaS fillellipse(50.50.30.30); end; end; until ch=’0’; closegraph; end.