Punct în setpixel și putpixel pascal

Să vorbim despre procedurile SetPixel (x, y, c) și PutPixel (x, y, c). care au una și lucrările w - vopsea peste un pixel de coordonate (x, y) de culoare c. Dar de ce este necesar - să picteze punctul într-o culoare diferită? Faptul că orice imagine este compusă din puncte (pixeli), fiecare având o culoare specifică și coordonatele sale fereastra grafica Pascal. În a doua parte a articolului (a se vedea. De mai jos), vom arăta cum să utilizați pixelii de umplere pentru a desena un dreptunghi în linia Pascal segmente, cerc și chiar o elipsă. Între timp, hai sa vorbim un pic despre geometria.

Punct în setpixel și putpixel pascal

obiecte geometrice simple în matematică este punctul - ceva care nu are nici o dimensiune sau volum sau zonă. Cu toate acestea, pentru a trage un punct, va trebui să-i dea cel puțin o anumită dimensiune (în caz contrar este imposibil să-i înfățișeze). Dintre punctele sunt construite toate liniile și formele, suprafețele și organismele - atât pe plan și în spațiu.

Cifra diferă de linia? linie închisă pe plan - este numai regiunea de frontieră, iar cifra - parte a planului, situată în interiorul liniei închise. Un exemplu al liniei este un cerc, iar cifra corespunzătoare - cerc (partea planului).

corp geometric este un set de puncte în spațiu. Doar nu orice set, și întregul set de puncte, separate de restul unei anumite limite, numită suprafață. Corp - aceasta este o figură geometrică în spațiu. Exemple corp geometric: un cub, tetraedru, o sferă, paralelipiped, etc ..

Crearea unei imagini în Pascal implementat folosind grafica raster (bitmap). Acest lucru înseamnă că, cel mai mic element al figurii este un punct, numit pixel. care sunt, de obicei sub forma unor mici cercuri sau pătrate. pixeli - dacă luați orice bitmap și foarte mult crește ea, zonele individuale care compun întreaga imagine poate fi văzut. Fiecare pixel are o singură culoare, și nu poate fi divizat în părți mai mici.

O altă caracteristică importantă este coordonate pixeli în fereastra grafică. sunt numărate de la colțul din stânga sus spre dreapta (OX-axa) și în jos (OY-axa). Dacă este așa, atunci există o nevoie naturală de rutine care ar stabili coordonatele de culoare ale pixelului. Sau, dimpotrivă, prezența figurii în fereastra grafică ar fi interesant să știe culoarea coordonatele date de pixeli.

✎ SetPixel (x, y, c) - Această procedură pictează pixel coordonatele (x, y) de culoare c.

✎ PutPixel (x, y, c) - Procedura pictează pixel coordonatele (x, y) de culoare c.

✎ GetPixel (x, y) - Returnează o culoare pixel cu coordonatele (x, y). Aceasta este funcția (deoarece returnează ceva).

Și primele două proceduri - SetPixel si PutPixel - sunt egale, și puteți utiliza oricare dintre ele. Pentru a demonstra efectul procedurilor, să scrie câteva programe simple. Dar funcția GetPixel (x, y) ne vom ocupa pe pagina următoare. Dar, mai întâi, da unele constante de culoare - nume de culori standard în PascalABC.Net:

Există multe alte constante de culoare, dar tot va fi de ajuns.

Deci, încercați să atragă un punct în coordonate PascalABC.Net, cum ar fi (300, 200), vopsite în culoarea roșie. Așa că l-am văzut, scrie-l de lângă cuvântul „punct“. Pentru a face acest lucru, creați un program simplu prin conectarea GraphABC modul:

Cod PascalABC.Net, PascalABC

Rulați aplicația și să încerce să găsească punctul mic roșu chiar deasupra partea stângă a cuvântului „punct“ în fereastra grafică deschisă. Acesta este pixel al coordonatelor (300, 200). Dar punctul de a crea nu sunt interesat. Dacă vom trage un set de puncte, venind unul după altul, de exemplu, în direcție orizontală, ar fi luat-o linie. Hai să o facem.

Construirea unei linii și o linie groasă

Cum de a construi o linie în PascalABC.Net folosind puncte? Construiți o linie de puncte, fiecare SetPixel de înregistrare de timp (sau PutPixel), acest lucru nu este o procedură corectă, deoarece ar fi trebuit să înregistreze SetPixel cantitate mare de timp. În schimb, clădirea poate fi aranjate într-o buclă în care, pas cu pas, punctele se vor alinia într-o linie dreaptă.

Desenați o linie de la punctul cu coordonatele (100, 200) la un punct (400, 200). După cum puteți vedea, această linie este paralelă cu OX axa (orizontală în înțelegerea noastră), de la începutul și la sfârșitul segmentului au aceleași coordonate y = 200. Astfel, schimbarea va avea numai de a coordona x - 100-400, iar pentru aceasta vom folosi o buclă ( cu un parametru) și procedura SetPixel. Asta program avem:

Cod PascalABC.Net, PascalABC

linia de contact Stabilit are o grosime de 1 pixel. Și pentru a trage o linie groasă. Avem nevoie, desigur, pentru a construi mai multe linii din apropiere, suprapunându-le, așa cum au fost unul la altul ori de câte ori grosimea liniei. Din moment ce se va schimba nu numai x, a și y, atunci nu se poate face fără un ciclu dublu atașat. În bucla exterioară se va schimba y, iar în interior - coordonate x. Rezultatul reflecțiilor noastre:

Cod PascalABC.Net, PascalABC

Punct în setpixel și putpixel pascal

frontieră dreptunghi

dreptunghi umplut

Cum să picteze un dreptunghi în PascalABC.Net folosind SetPixel PutPixel sau procedură? Pentru a umple dreptunghiul la orice culoare, folosind aceeași metodă ca și la crearea unei linii groase: sunt desenate în segmente de 1 pixel grosime, unul după altul, până când grosimea totală a acestora nu atinge o lungime a unora dintre laturile dreptunghiului. Un pic de reformatarea cod program pentru linia de caractere aldine. obținem:

Cod PascalABC.Net, PascalABC

Punct în setpixel și putpixel pascal

desena un cerc

Cum de a desena un cerc în PascalABC.Net folosind puncte? Este posibil să nu vopsea întregul dreptunghi, iar o parte din ea, de exemplu, un cerc, un pătrat situat în mijlocul nodurilor opuse cu coordonatele (x0 - r, y0 - r) și (x0 + r, y0 + r). Știm că ecuația cercului centrat la punct și raza r este după cum urmează (Y0 X0.):

Dar avem nevoie nu este un cerc, iar cercul, care este „în interiorul“ cercului. Acest întreg set de puncte (x, y), pentru care distanța până la centrul nu mai r (x0 y0.):

Astfel, în scopul de a picta un cerc într-un pătrat, acesta trebuie să fie un punct pentru a verifica punerea în aplicare a inegalităților de mai sus: dacă este adevărat, atunci punctul (x, y) sunt colorate. Aici este programul relevant:

Desenează o elipsă umplută

Cum de a desena o elipsă umplută PascalABC.Net folosind puncte? Pentru aceasta folosesc o elipsă înscrisă într-un dreptunghi cu coordonatele nodurilor opuse (x1. Y1) și (x2. Y2), pentru care x2> x1. y2> y1. În primul rând, observăm că ecuația unei elipse cu centrul la originea și semiaxes a și b, după cum urmează:

Dar, pentru că avem nevoie pentru a picta interiorul elipsei, atunci ecuația va deveni o inegalitate elipsă umplut:

Parte a dreptunghiului paralel cu axele de coordonate. Aceasta înseamnă că coordonatele centrului său sunt egale cu jumătate din suma coordonatelor nodurilor opuse: x0 = (x1 + x2) / 2, y0 = (y1 + y2) / 2. Dar cum să găsească o și b? Această latură a dreptunghiului împărțit la 2 (care este motivul pentru care sunt numite semi-axe): a = (x2 - x1) / 2, b = (y2 - y1) / 2. În acest sens, inegalitatea umplut elipsa devine:

Cod PascalABC.Net, PascalABC

Punct în setpixel și putpixel pascal

După cum se vede în figurile din elipsei și cercul, creând imagini utilizând pixelii de umplere are un dezavantaj semnificativ: limite de desen nu par foarte buna, ca în cazul în trepte. Acest lucru este de înțeles: după ce toți pixelii - nici un punct în sens geometric, care nu au dimensiunea, dar încă mai mici pătrate sau cercuri. Atunci de ce nici unul din pașii de la toate fotografiile și desenele? - Tu întrebi. Da, pentru că există un așa-numit anti-aliasing. Esența acestei metode constă în principal în faptul că de lângă punctul de frontieră pentru a înlocui mai ușoare, sau mai precis, cel mai aproape de culoare pentru fundal, din cauza a ceea ce creează un efect de tranziție lină.

Uneori, situația opusă, atunci când nu trebuie să aplatizați imaginea prin a face o margine netedă (în special forme geometrice), așa cum au fost estompate. Acest lucru se face astfel: să ia mai mulți pixeli vecine ale imaginii, având în culori diferite, în mod normal, și înlocuiți pixelii de aceeași culoare, care coincide cu culoarea de un pixel. Ia-o imagine cu un pixeli foarte mărite.

div> .uk-panel „>„date-uk-grid-marja>