Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Hasonló dokumentumok
Programozás I. Grafika Eseménykezelés. Programozás I. 2. gyakorlat Interakció a grafikus felületen, tagfüggvények. Surányi Márton PPKE-ITK

Bevezetés a programozásba I.

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Maximum kiválasztás tömbben

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Bevezetés a programozásba I.

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

BME MOGI Gépészeti informatika 15.

Java és web programozás

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

VII. Appletek, grafika

Programozási nyelvek 1. előadás

Bevezetés a programozásba. 9. Előadás: Rekordok

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

A Paint program használata

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

BME MOGI Gépészeti informatika 14.

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Informatika terméktervezőknek

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás II. 2. Dr. Iványi Péter

Pénzügyi algoritmusok

A grafika programozás módozatai A képernyő koordinátarendszere A graphics.h header-fájl fontosabb függvényei Mintaprogram

Algoritmizálás + kódolás C++ nyelven és Pascalban

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

INFORMATIKA tétel 2019

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

Bevezetés a programozásba I.

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

1. Alapok. Programozás II

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Bevezetés a programozásba I.

Baran Ágnes. Gyakorlat Függvények, Matlab alapok

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Mechatronika segédlet 1. gyakorlat

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

CAD-ART Kft Budapest, Fehérvári út 35.

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Képszerkesztés. Letölthető mintafeladatok gyakorláshoz: Minta teszt 1 Minta teszt 2. A modul célja

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Bevezetés a programozásba I.

Bevezetés a C++ programozásba

S z á m í t ó g é p e s a l a p i s m e r e t e k

Az MS Word szövegszerkesztés modul részletes tematika listája

Pénzügyi algoritmusok

Mintavételes szabályozás mikrovezérlő segítségével

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Lemezalkatrész modellezés. SolidEdge. alkatrészen

Programozás 7.o Az algoritmus fogalma (ismétlés)

INFORMATIKA tétel 2018

Mechatronika segédlet 3. gyakorlat

Egyszerű példaprogramok gyakorláshoz

IV. LEGO Robotprogramozó Országos Csapatverseny

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Imagine Logo Tanmenet évfolyam

QGIS gyakorló. --tulajdonságok--stílus fül--széthúzás a terjedelemre).

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

CIB Internet Bank asztali alkalmazás Hasznos tippek a telepítéshez és a használathoz Windows operációs rendszer esetén

F# (efsárp) példaprogramok

QGIS tanfolyam (ver.2.0)

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Delphi programozás I.

Programozási nyelvek 2. előadás

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Programozás II. 4. Dr. Iványi Péter

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

BME MOGI Gépészeti informatika 13.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

FELHASZNÁLÓI ÚTMUTATÓ

EDInet Connector telepítési segédlet

Vezérlési szerkezetek

Kérdés Lista. A Magyarországon alkalmazott rajzlapoknál mekkora az oldalak aránya?

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Alkalmazott modul: Programozás 2. fejezet. C++ alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Rajz 01 gyakorló feladat

Raszter georeferálás QGIS-ben Összeállította: dr. Siki Zoltán verzióra aktualizálta: Jáky András

Autodesk Inventor Professional New Default Standard.ipt

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Algoritmusok raszteres grafikához

mintásfal mintásfal :m :sz :dbjobbra :dbfel

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

A szerzõrõl... xi Bevezetés... xiii

Pénzügyi algoritmusok

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

117. AA Megoldó Alfréd AA 117.

6. fejezet: Ciklusok

Átírás:

Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba II 1. gyakorlat A grafikus könyvtár használata, alakzatok rajzolása 2014.02.10. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

A grafikus könyvtár Programkönyvtárak Az alap C++ nem képes grafikát kezelni, csak a konzolt, de különböző bővítmények (programkönyvtárak) találhatóak hozzá, amelyek használatával már tudja kezelni A C++-hoz rengeteg könyvtár található, ezek közül csak kevés kerül telepítésre egyetlen fordító/környezet telepítésekor a legtöbbet külön kell telepítenünk, használatba vennünk Az egyik ilyen könyvtár az SDL (Simple DirectMedia Layer), amely teljes körű 2D-3D grafikát biztosít ingyenes, azonban kezelésének megtanulása sok időt vesz igénybe, ezért nem tudjuk direkt használni PPKE ITK, Bevezetés a programozásba II 1:2

A grafikus könyvtár A Graphics könyvtár működése Az SDL bonyolultsága miatt mi egy saját fejlesztésű könyvtárat használunk a grafikához 2D-s egyszerű alakzatokat tartalmazó grafikus felület használható a konzol felülettel párhuzamban két fájl kell hozzá: graphics.hpp, libgraphics.a Hátránya: nem teljes, különálló grafikus könyvtár, hanem az SDL-t használja, és annak az utasításait egyszerűsíti le a számunkra, ezért az SDL-t is fel kell tennünk tehát le kell töltenünk az SDL-t és telepíteni, majd le kell töltenünk a Graphics-t és telepíteni, ezután tudunk programokat készíteni PPKE ITK, Bevezetés a programozásba II 1:3

A grafikus könyvtár A Graphics könyvtár működése saját program #include <graphics.hpp> graphics #include <DSL*.h> SDL PPKE ITK, Bevezetés a programozásba II 1:4

A képernyő kezelése A grafikus képernyő egy koordinátarendszerben van origó a bal felső sarok: (0,0) az értékek lefelé, illetve jobbra nőnek pixelenként a képernyő méretét mi adhatjuk meg a képernyő indításakor kezelhetünk a képernyőn kívül lévő pontokat is (lehetnek negatív értékek is) (-x,-y) (x,-y) (-x,y) képernyő (x,y) PPKE ITK, Bevezetés a programozásba II 1:5

Utasítások A parancsok a genv névtérben vannak A grafikus képernyőt a gout.open(int width, int height) utasítással nyitjuk meg az ablak szélességének és magasságának megadásával használhatunk teljes képernyős üzemmódot is egy harmadik paraméterrel: gout.open(int width, int height, bool full_screen) Lehetőségünk van a képernyő aktuális tartalmának elmentésére egy bmp fájlba a gout.save(string filename) utasítással menthetünk a megadott fájlnévre igaz értékkel tér vissza, ha sikerül a mentés PPKE ITK, Bevezetés a programozásba II 1:6

Utasítások, rajzolás A rajzolás során nyilvántartunk egy pontot, amelyből a rajzolás indul kezdetben a (0,0) pont, de minden utasítás végén a rajzolás befejező pontja lesz a rajzpont helyzete lekérdezhető a gout.x() és gout.y() függvényekkel a rajzpontot eltolhatjuk a gout << move(x,y) utasítással, amely az aktuális ponthoz képest tolja el gout << move_to(x,y) utasítással, amely a megadott koordinátába tolja el PPKE ITK, Bevezetés a programozásba II 1:7

Utasítások, rajzolás Az aktuális rajzoló színt a gout << color(r,g,b) utasítás változtatja meg a következő színbeállító utasításig érvényben van, alapértelmezetten a szín fehér az új színt vörös (R), zöld (G) és kék (B) komponensekből állítja elő, mindhárom komponens egy 0 és 255 közötti egész szám lehet, pl.: gout << color(100,0,0); // bordó szín // minden kirajzolás bordó lesz gout << color(0,255,0); // zöld szín A képernyőt frissítenünk kell ahhoz, hogy a rajzunk megjelenjen: gout << refresh; PPKE ITK, Bevezetés a programozásba II 1:8

Utasítások, rajzolás Pont rajzolása: gout << dot; az aktuális rajzpont színét megváltoztatja az aktuális rajzolási színre a rajzpontot nem mozgatja Vonal: gout << line(x,y); gout << line_to(x,y); egyenes szakaszt rajzol a rajzpontból kiindulva a célkoordinátába (amely lehet relatív, vagy abszolút) Téglalap: gout << box(x,y); gout << box_to(x,y); vízszintes alapú téglalapot rajzol a rajzpontból kiindulva a célkoordinátába (amely lehet relatív, vagy abszolút) PPKE ITK, Bevezetés a programozásba II 1:9

Utasítások, rajzolás Szöveg kiírása: gout << text(t); kirajzolja a szöveget a rajzpontból vízszintesen induló alapvonalra, a rajzpontot a szöveg végén, az alapvonalon hagyja a szöveg típusa lehet string és char is, a '\n' karaktert sorvége jelként értelmezi Rajzolásnál ügyelni kell arra, hogy: a pixelek indexeltek, így az nn mm méretű kijelző (0 nn 1, 0.. mm 1) koordinátákkal rendelkezik a rajzolás a kezdő koordinátákat is magában foglalja, pl. a box(10, 10) egy 11 11 méretű téglalapot készít PPKE ITK, Bevezetés a programozásba II 1:10

Szövegkezelés A szövegnek van egy ún. alapvonala (angolul baseline), ez egy láthatatlan vonal, amire ráülnek a karakterek Az alapvonal feletti rész maximális magasságát angolul ascentnek, az alapvonal alatti rész maximális magasságát descentnek hívjuk gout.cascent() - egy egész számot ad eredményként, az aktuális betűkészlet ascent értékét pixelekben gout.cdescent() - egy egész számot ad eredményként, az aktuális betűkészlet descent értékét pixelekben gout.twidth(s) - visszaadja az s szöveg szélességét pixelekben, az aktuális betűkészlettel megjelenítve PPKE ITK, Bevezetés a programozásba II 1:11

Eseménykezelés A képernyőnk esemény-érzékeny, azaz érzékeli a billentyűlenyomásokat, az egészmozgást, és kattintást, illetve időzíthetünk is eseményeket (részletek majd később) Ezeket az eseményeket felhasználva interakcióra van lehetőségünk a képernyővel, pl. ha kattintunk a képernyőn, akkor rajzolhatunk egy téglalapot Az eseményeket a gin változó fogadja a >> operátorral, az operátor logikai értéket ad vissza, így használható feltételként, ami addig igaz, amíg az ablak nyitva van az ablak bezárása után hamis lesz, ami azt jelzi, hogy több esemény nem következhet be a programban PPKE ITK, Bevezetés a programozásba II 1:12

Az eseményciklus Az eseménynek típusa van, ez az event rekord, amely különböző mezőkkel rendelkezik Az eseményfogadó művelet a gin >> ev várakozik egy eseményre, majd beteszi azt az event típusú ev változóba, eredményként a gin-t adja vissza az ablak bezárása esemény kivételével mindig érvényes eseményt tesz ev-be ez használható az ablak nyitva tartására: event ev; while (gin >> ev){ // a ciklusmag minden processzorütemre lefut } PPKE ITK, Bevezetés a programozásba II 1:13

Az eseményciklus A legegyszerűbb grafikus program az, amely csak megnyitja a grafikus képernyőt, és nem csinál semmit: #include <graphics.hpp> using namespace genv; int main(){ gout.open(200,200); // létrehozunk egy 200*200-as képernyőt event ev; // ez az esemény csak a várakozáshoz kell while (gin >> ev) { } // várunk a bezárásra return 0; } PPKE ITK, Bevezetés a programozásba II 1:14

Példák Feladat: Rajzoljuk ki egy 200 200-as képernyő közepére egy 100 100-as négyzetet, ehhez: induljunk ki az előző programból rajzoljunk egy 100 100-as téglalapot: gout << box(99,99); a téglalapot középre kell tennünk, ezért toljuk el a rajzpontot az (50,50)-es pontba még a rajzolás előtt: gout << move_to(50,50) << box(99,99); a piros színhez állítsuk be a színt még a rajzolás előtt: gout << move_to(50,50) << color(255,0,0) << box(99,99); PPKE ITK, Bevezetés a programozásba II 1:15

Példák Megoldás: #include <graphics.hpp> using namespace genv; int main(){ gout.open(200,200); gout << move_to(50,50) // mozgatás << color(255,0,0) // szín beállítás << box(99,99); // téglalap rajzolás gout << refresh; // frissítés event ev; while (gin >> ev) {} return 0; } PPKE ITK, Bevezetés a programozásba II 1:16

Példák Feladat: Készítsük el egy háromszöget az előbbi képernyő közepére, amelynek a vonala fehér, a kitöltése fekete ehhez három vonalat kell húznunk egymás után (azaz két rajzolás között nem kell módosítanunk a rajzpontot) Megoldás: int main(){ gout.open(200,200); gout << move_to(50,100) << line_to(150,50) << line_to(150,150) << line_to(50,100) << refresh; event ev; while (gin >> ev) {} return 0; } PPKE ITK, Bevezetés a programozásba II 1:17

Példák Feladat: Rajzoljunk véletlenszerűen elhelyezett, illetve változó méretű és színű téglalapokat a képernyőre használjunk konzolt is, a képernyő méretét, és a négyzetek számát kérjük be konzol felületen keresztül, továbbá kérjünk egy fájlnevet a felhasználótól, ahova a képernyőt elmentjük a grafikus képernyőt csak akkor indítsuk, ha az adatokat már beolvastuk használjuk a megszokott véletlenszám-generátorunkat, persze mindig a megfelelő korlátok között miközben fut a grafikus képernyő, a konzolon tovább dolgozhatunk PPKE ITK, Bevezetés a programozásba II 1:18

Példák Megoldás: #include <iostream> // újra kell az iostream #include <string> // string a fájlnév miatt #include <graphics.hpp> using namespace std; using namespace genv; // mindkét névtér szükséges int main(){ srand(time(0)); // véletlengenerátor int x, y, z, r1, r2, r3; // változók cout << "A képernyő szélessége: "; cin >> x; cout << "A képernyő magassága: "; cin >> y; cout << "A négyzetek száma: "; cin >> z; gout.open(x,y); // megnyitjuk a képernyőt PPKE ITK, Bevezetés a programozásba II 1:19

Példák // berajzoljuk egy ciklusban a négyzeteket: for (int i = 0; i < z; i++) { // a véletlen szín komponensei 0..255: r1 = rand() % 256; r2 = rand() % 256; r3 = rand() % 256; gout << color(r1, r2, r3); } // a kezdő pozíció 0..maximum: r1 = rand() % x; r2 = rand() % y; gout << move_to(r1,r2); // a téglalap mérete 0..maximum: r1 += rand() % x; r2 += rand() % y; gout << box_to(r1,r2); PPKE ITK, Bevezetés a programozásba II 1:20

Példák gout << refresh; // elég egyszer frissíteni string s; cout << "Fájlnév: "; cin >> s; if (gout.save(s)) // ha sikeres a mentés cout << "A mentés megtörtént." << endl; else cout << "A mentés sikertelen." << endl; } event ev; while (gin >> ev) {} return 0; PPKE ITK, Bevezetés a programozásba II 1:21

Feladatok 1. Rajzoljuk ki az alábbi alakzatokat: PPKE ITK, Bevezetés a programozásba II 1:22