7 3 2 Umplerea (pictura) unei figuri arbitrar închise

7.3.2. Umplerea (pictura) unei figuri arbitrar închise

Procedura FloodFill (X, Y, frontieră) umple o formă închisă arbitrar utilizând stilul și culoarea de umplere curentă. Coordonatele punctului (X, Y) indică din ce punct al regiunii se va efectua umplerea. Dacă punctul se află într-o formă închisă, zona interioară va fi vopsită. Dacă cifra nu este închisă, umplutura se va întinde pe tot ecranul. Parametrul de graniță specifică culoarea liniei de frontieră. De exemplu, imaginea unei forme închise poate fi vopsită folosind doi operatori: SetFillStyle (5, Red); FloodFill (320, 310, Cyan). Aici, figura Roșie este umplută cu simboluri \\ de grosime dublă, iar granița - cu culoarea Cyan. Punctul (320, 310) este un punct interior al acestei regiuni.







7.3.3. Construcția celor mai simple figuri geometrice

Linii și puncte. Pentru a construi imagini, se întâmplă deseori să specificați punctul de plecare al acestei construcții. În acest scop, graficul lui Pascal oferă conceptul de "index curent" (CP-CURRENT POINTER), care determină poziția "cursorului invizibil". Pentru a muta CP în limitele ecranului monitorului, care, după cum știm, reprezintă primul trimestru al sistemului de coordonate cartezian, există o serie de proceduri și funcții. În primul rând, aceasta este procedura MoveTo (X, Y), care mișcă cursorul curent (CP) în punctul cu coordonatele X, Y. De exemplu, procedura MoveTo (200,100) va muta pointerul curent (invizibil) în punctul ecranului cu coordonate (200, 100).

Pentru a desena linii drepte, se folosesc trei proceduri:

Linia (X, Y, X1, Y1: întreg) trasează o linie din punctul cu coordonatele (X, Y) până la punctul (X1, Y1);

LineTo (X, Y) construiește o linie din punctul poziției curente a indicatorului la punctul cu coordonatele X, Y;

LineRel (dX, dY) construirea unei linii din punct la poziția curentă a cursorului la punctul (CPX + dX, CpY + dY), în care CPX și CpY - curent coordonatele Cp. Culoarea liniei este specificată de operatorul SetColor (Culoare).

TurboPascal vă permite să desenați linii cu un stil diferit: subțire, lată, punctată, punctată etc. Stilul este setat de procedura SetLineStyle (Stil: cuvânt; model: cuvânt; Grosime: cuvânt). Stilurile de linie sunt prezentate în Tabelul 3.

Tabelul 3. Stiluri de linie

Orice imagini sunt afișate pe ecran, toate sunt construite din puncte. Pentru a afișa punctul, folosiți procedura PutPixel (X, Y, Color), care atrage pe afișaj un punct (pixel) cu coordonatele X, Y și culoarea "Culoare".

Mai jos este un program care umple ecranul monitorului cu puncte ale căror culoare și locația lor este setată de un senzor de număr aleator Randomize:

Var X, Y, c, d, m: Integer;

d: = Detectați; InitGRAPH (d, m, '');

în timp ce nu apăsați pe tastatură

Dreptunghiuri. Pentru a construi figuri rectangulare, există mai multe proceduri. Primul dintre acestea - procedura este dreptunghi (X1, Y1, X2, Y2) desen un dreptunghi de culoare specifica operatorului setcolor pre. Pentru a crea un dreptunghi umplut, utilizați procedura: Bar (X1, Y1, X2, Y2). In plus fata de dreptunghiuri pot construi și forme dreptunghiulare spațiale cu procedura de Bar3D (X1, Y1, X2, Y2 întreg, Adâncime: Word; Top :. Boolean), unde X1, Y1, X2, Y2 definește poziția dreptunghiului fiind spațiu față "din față" forme și parametru adâncimea specifică „adâncimea“ dreptunghi tridimensional, care este de obicei - div 4. (Cube) (X2 X1 + 1). Parametrul Top determină poziția vârfului dreptunghiului față de fața frontală. Culoarea de umplere pentru Bar și Bar3D este stabilită de procedura SetFillStYle.

Arcuri și cercuri. Procedura de urmărire a circumferinței culoarea curentă are următorul format: Circle (X, Y, Radius: cuvânt) în care X și Y - centrul cercului și Radius - raza sa. Într-o serie de cazuri, în special pentru crearea de cifre pseudo-volumetrice, se utilizează arce. Ele pot fi trase prin procedeul Arc (X, Y: integer; StAngle, EndAngle, Radius: cuvânt) în care X, Y - centrul cercului, StAngle și EndAngle - unghiul inițial și final de arc specificat în grade, Radius - raza arcului.

Ellipsuri și sectoare. Pentru construcția arcurilor eliptice proceduri elipsă (X, Y, StAngle, EndAngle, XR, YR) proiectate, în care X, Y - centrul elipsei pentru a afișa coordonatele, XR si YR - axa orizontală și verticală. Arcul elipsei este tras de la unghiul inițial Stâng până la unghiul de capăt EndAngle cu culoarea actuală. Fundalul din interiorul elipsei coincide cu fundalul ecranului. Pe baza faptelor de comunicare elipsă matematic cu cercul, este posibil să se tragă arcuri și cercuri (dar nu și a elipsei), dacă luăm în această procedură de valori egale XR și YR. Pe de altă parte, pentru construirea unei proceduri complete elipsă elipsă (X, Y, StAngle, EndAngle, XR, YR) pentru a pune StAngle = 0, EndAngle = 360.







Pentru a crea o elipsă umplută, folosind o procedură specială FillEllipse (X, Y, XR, YR), unde X, Y - centrul elipsei pentru a afișa coordonatele, XR si YR - axa orizontală și verticală. Substituentul este setat de procedura SetFillStyle. Evident, pentru a desena o elipsă ne-pictată, trebuie să specificați culoarea de fundal în procedura SetFillStyle.

Puteți crea și umple sectorul într-o elipsă. Acesta utilizează Procedura Sector (X, Y, StAngle, EndAngle, XR, YR), unde X, Y - centru, XR, YR - raze orizontale și verticale, Stangle și EndAngle - pornire și se termină unghiul (în grade).

Mai jos este un program pentru lucrul cu diferite tipuri de linii și forme de vopsire cu culori diferite.

Var i, d: întreg;

SetLineStyle (SolidLn, 0, NormWidth);

SetFillStyle (SolidFill, roșu);

Sector (100, 200, 45, 135, 80, 80);

un unghi inițial de 45, un unghi finit 135 și o rază de 80 °

SetLineStyle (SolidLn, 0, ThickWidth);

SetFillStyle (SolidFill, galben);

Dreptunghi (300, 10, 400, 70);

FloodFill (350, 50, roșu);

SetLineStyle (SolidLn, 0, NormWidth);

SetFillStyle (7, roșu);

Cercul (500, 250, 50);

FloodFill (500, 250, Cayan);

Textul de ieșire. Imaginile afișate pe ecran sunt de obicei însoțite de un text explicativ. În modurile grafice, procedurile OutText și OutTextXY sunt utilizate pentru aceasta. Procedura OutText (Text) imprimă o linie de text pornind de la poziția curentă a Cp. Procedura OutTextXY (X, Y, Text), unde X, Y sunt coordonatele punctului de pornire al textului de ieșire (colțul din stânga sus al textului de ieșire), Textul este o constantă sau o variabilă de șir de tip.

Tab. 5. Tabel de fonturi

Puteți seta dimensiunea fontului dorită într-un alt mod - folosind procedura SetUserCharSize (multX, divX, multY, divY: word). Primii doi parametri controlează dimensiunea orizontală, ultimele două - pe verticală. Dacă luați o lățime a fontului standard, atunci raportul multX / divX va stabili lățimea.

În acest tabel, sunt date fonturi cu dimensiunea 0 și având o orientare orizontală.

Iată un exemplu de program care demonstrează utilizarea diferitelor fonturi și a dimensiunilor acestora la afișarea textului.

Var i, d: întreg;

SetTextStyle (DefaultFont, HorizDir, 3);

OutTextXY (5, 1, 'DefaultFont dimensiune 3');

SetTextStyle (TriplexFont, HorizDir, 1);

SetTextStyle (SmaillFont, 0, 4);

SetTextStyle (DefaultFont, VertDir, 3);

SetTextStyle (TriplexFont, 1, 1);

OutTextXY (5, 3, 'TriplexFont dimensiune 1');

SetTextStyle (GothicFont, VertDir, 2);

Mijloace de lucru cu fragmente. Efectul mișcării în modul grafic. În plus față de instrumentele grafice discutate anterior pentru construirea și afișarea imaginilor, există o serie de proceduri suplimentare care vă permit să salvați și să restaurați fragmente individuale ale imaginii. Pentru a manipula un fragment, trebuie mai întâi să știți dimensiunea sa. Aceasta se face folosind funcția ImageSize (X1, Y1, X2, Y2), unde X1, Y1, X2, Y2 sunt coordonatele colțului din stânga și din dreapta sus al zonei dreptunghiulare a ecranului. Funcția returnează dimensiunea fragmentului specificat în octeți. Apoi spațiul pentru fragment este alocat în memoria mașinii. Pentru a face acest lucru, utilizați procedura GetMem (BitMap, Size), în cazul în care BitMap este o variabilă de tip pointer, Dimensiune - dimensiunea fragmentului obținut cu ImageSize.

Procedurile descrise mai sus pot fi folosite pentru a crea obiecte în mișcare pe ecran. Mai jos este un program similar.

Var i, d, Dimensiune: întreg; p: pointer;

SetFillStyle (1, roșu);

Dimensiune: = ImageSize (18, 220, 42, 244);

Deși nu este făcută de KeyPress

PutImage (i, 220, p ^, NormalPut);

PutImage (i, 220, p ^, NormalPut);

Acest program implementează mișcarea mingii roșii de pe marginea din stânga a ecranului spre dreapta și spate. Procesul este terminat prin apăsarea oricărei taste.

Lucrarea de laborator №7

Scopul lucrării. să învețe proceduri și funcții grafice; aflați cum să creați programe pentru a construi pe ecran diverse imagini, umpleți-le cu culoare; master tehnologia de afișare a textului pe ecran în modul grafic; organizați mișcarea obiectelor grafice pe monitor.

Pentru a procesa informații grafice, trebuie să puteți inițializa modul grafic al monitorului, să cunoașteți toate procedurile și funcțiile construirii celor mai simple primitive grafice și să le aplicați pentru a construi figuri compozite (compozite). Mișcarea cifrelor pe ecran se bazează pe "împiedicarea" unei imagini în memoria dinamică și pe apelul său ulterior (de obicei într-un ciclu) pe ecranul monitorului la puncte consecutive, ceea ce creează iluzia mișcării sale. Procedura de a apela proceduri și funcții adecvate în acest scop trebuie studiată cu atenție.

Înainte de a efectua lucrarea, este necesar să vă familiarizați cu materialul teoretic pe tema "Programare grafică".

Exemplul 1. Crearea unui program pentru construirea unui model format de intersecția celor două familii segmente divergente în care k1 și k2 - distanța dintre stânga și segmentele de dreapta, și h - shift jos pantă (în sus), a întregii familii.

Soluția. Linia orizontală este construită de linia de procedură (0, k, 640, k). Dacă trebuie să construiți n linii, atunci această procedură trebuie plasată într-o buclă: pentru i: = 1 până la n line (0, i * k, 640, i * k). Panta liniilor se obține prin adăugarea treptei h la a doua coordonată (h> 0, apoi înclinația în jos, h 2 pe [a, b].

Soluția. Pentru a construi un grafic de funcții este necesar să divizăm segmentul [a, b] în n (h este pasul de partiționare (b-a) / n) și apoi să folosim linii și lineto pentru a trasa linia dreaptă care formează o linie întreruptă a graficului funcției. Este posibil, desigur, să utilizați și să ieșiți punctul (construcția punctului graficului). În program, construim o funcție pentru calculul valorilor sale la un punct arbitrar și o procedură pentru construirea unei linii întrerupte care reprezintă punctele unei curbe.

Var gD, gM, n: întreg;

funcția f (x: reală). reale;

Graficul de procedură (x0, x1, y0, y1, n: cuvânt; a, b: real);

Var h, m, x, t1, t2: real;

i, u, v, xv, yv: cuvânt;

Studierea programării în limba lui Pascal. elevii invata mai ferm elementele de baza ale algoritmizarii si programarii in Basic (setul metodic pentru cursul optional "Programul pentru limba Paskal" include materiale didactice si un workshop.) Popov.







Trimiteți-le prietenilor: