SUBPOGRAME ORIENTATE SPRE ARCURI, CERCURI SI ALTE CURBE, Aplicaie

SUBPOGRAME ORIENTATE SPRE ARCURI, CERCURI SI ALTE CURBE

6.1. Proceduri si functii

Circle 4Circle 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 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; {centru}

Xstart, Ystart:integer {inceputul arcului}

Xend,Yend:ineteger {sfarsitu arcului}

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.yasp); {sector circular}

sector(getmaxx div 2. getmaxy div 2 180.135.50.50*longint(xasp) div yasp); {punc centrat}

end;

‘6’:begin

fillellipse(100.350.50.50);

getaspectration(xasp,yasp); {elipsa circulara}

fillellipse(50.50.30.30);

end;

end;

until ch=’0’;

closegraph;

end.

download