SZÁMÍTÓGÉPI GRAFIKA MARKEREK

Hasonló dokumentumok
SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

A Pascal programozási nyelvben minden programnak a következő szerkezete van:

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Algoritmizálás és adatmodellezés tanítása 1. előadás

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

Érdekes informatika feladatok

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

VISUAL BASIC ALAPISMERETEK

1. A feladatról. 2. Az áramkör leírása. Mechatronika, Optika és Gépészeti Informatika Tanszék D528. Léptetőmotor vezérlése

A rekurzív algoritmusok tanításáról

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

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Programozás alapjai Free Pascal

Demográfiai modellek

Tartalom Képernyő részei... 2

BME MOGI Gépészeti informatika 15.

Számítógépes grafika

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

DOKUMENTÁCIÓ KÉSZÍTETTE: Naszári László I. évf. levelező Informatika tanári szak 2003.

Imagine Logo Tanmenet évfolyam

A feladat. A főprogram

Delphi programozás IV.

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

Mesh generálás. IványiPéter

15. Programok fordítása és végrehajtása

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

REKURZIÓK SZÁMÍTÓGÉPES PROGRAMOK SEGÍTSÉGÉVEL

Megoldott feladatok. Informatika

Delphi programozás I.

Közismereti informatika 2.zh T-M szakirány

Egyszerű példaprogramok gyakorláshoz

A Paint program használata

4. Lecke. Körök és szabályos sokszögek rajzolása. 4.Lecke / 1.

Programozási nyelvek 1. előadás

EGYVÁLTOZÓS FÜGGVÉNYEK ÁBRÁZOLÁSA

Demografia / Demográfiai modell

A MIMIO interaktív tábla használata. Dr. Boda István DRHE,

PASzSz. Dr. Kotsis Domokos

Szöveges műveletek. Mielőtt nekikezdenénk első szövegünk bevitelének, tanuljunk meg néhány alapvető műveletet a 2003-as verzió segítségével:

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

Programozás alapjai. 5. előadás

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Prezentáció, Diagramok, rajzolt objektumok. Szervezeti diagram

Máté: Számítógépes grafika alapjai

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Cohen-Sutherland vágóalgoritmus

Programozási tételek általánosítása 2. Szlávi Péter 2015

Delphi programozás III.

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

6. A Pascal nyelv utasításai

Matlab alapok. Baran Ágnes. Grafika. Baran Ágnes Matlab alapok Grafika 1 / 21

Programozási alapismeretek (M1,M2)

Demográfiai modellek (folytatás)

GráfRajz fejlesztői dokumentáció

Scratch bevezető foglalkozás Scratch bevezető foglalkozás

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

Rekurzió(k) - iteráció(k) Gyakorlati összefoglaló Tartalom... 2 Alap rekurzív példák... 3 Tételek rekurzív és iteratív megoldásai...

Molnár Mátyás. Bevezetés a PowerPoint 2013 használatába magyar nyelvű programváltozat. Csak a lényeg érthetően!

GÉPÉSZETI ALKALMAZOTT SZÁMÍTÁSTECHNIKA f iskolai mérnökhallgatók számára. A 4. gyakorlat anyaga. Adott: Geometriai méretek:

1.A. feladat: Programablakok

Algoritmusok raszteres grafikához

Készítette:

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

BEÁGYAZOTT RENDSZEREK ALAPJAI. Grafikus benchmark alkalmazás

Angol szótár V

KÉPFELDOLGOZÁS. 10. gyakorlat: Morfológiai műveletek, alakjellemzők

Diagram formázása. A diagram címének, a tengelyek feliratainak, jelmagyarázatának, adatfeliratainak formázása

Grafikus csővezeték és az OpenGL függvénykönyvtár

Láthatósági kérdések

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

Utolsó módosítás: Feladat egy kétváltozós valós függvény kirajzolása különféle megjelenítési módszerekkel.

Kép mátrix. Feladat: Pap Gáborné-Zsakó László: Algoritmizálás, adatmodellezés 2/35

Számítógépes grafika

Programozás alapjai. 8. előadás

FEOR szám kereső V

Bevezető. Mi is az a GeoGebra? Tények

Újdonságok az ArchiTECH.PC V es verziójában

fmaozaik :n :m :h :s járóóra

Mechatronika segédlet 1. gyakorlat

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Java és web programozás

Programozási nyelvek 3. előadás

Adatbázis Rendszerek II. 2. Gyakorló környezet

Banki utalás fájl. Bank, Pénztár/Átutalás előkészítése menüpontban készíthetjük el a banki utalás fájlt.

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

Ábrák készítése. a dokumentációhoz. Szlávi Péter

3D-s számítógépes geometria és alakzatrekonstrukció

Új prezentáció létrehozása az alapértelmezés szerinti sablon alapján.

1. Előadás Matlab lényeges vonásai,

Készítsen négy oldalas prezentációt az E CD bolt számára! Tervezze meg az emblémáját!

Függvények Függvények

Csúcsívek rajzolása. Kezdjük egy általános csúcsív rajzolásával! Ehhez tekintsük az 1. ábrát!






Átírás:

SZÁMÍTÓGÉPI GRAFIKA MARKEREK FELADAT Egy grafikus markert kezelő program elkészítése, amely képes 1. a markert a képernyőn mozgatni (a kurzormozgató billentyűk segítségével), 2. a méretét növelni, illetve csökkenteni (a méret a mozgás lépésköze), 3. alakját megváltoztatni (amely külső jegye lehet az esetleges speciális funkciójának). TUDNIVALÓK 1. Mindenekelőtt próbálja ki: mire lehet gondolni (Marker.exe)! ( Kezeléséhez : mozgatás a kurzormozgató billentyűkkel, méretnövelés + billentyű, csökkentés - billentyű, alakváltoztatás az 0.. 4 billentyűkkel, kilépni az Esc billentyűvel.) 2. A marker Pascal típusa: TMarker=Record typ:tmarkertype; size,color:integer;{alaki jellemzők} x,y:integer;{hollét} TMarkerType=(MT_Pont,MT_Plusz,MT_Rombusz,MT_X,MT_Nyil); {0 pont, 1 +; 2 ; 3 ; 4 (ferde nyíl)} 3. A markert kezelő műveletek: Procedure SetMarker( Var mk:tmarker; Const typ:tmarkertype; siz,col,x,y: Integer); {beállítja a marker tulajdonságait} Procedure SetMarkerType( Var mk:tmarker; Const typ:tmarkertype); {átállítja a marker típusát} Procedure SetMarkerSize( Var mk:tmarker; Const siz:integer); {átállítja a marker méretét} Procedure SetMarkerColor( Var mk:tmarker; Const col:integer); {átállítja a marker színét}

Procedure Marker( Var mk:tmarker; Const x,y:integer); {kirajzolja a markert az (x,y) bázisponttól} és ezek közül a legtöbbnek GetOperáció nevű függvénypárja, mint pl. az alábbi. Function GetMarkerType(Const mk:tmarker):tmarkertype; {visszadja a marker típusát} 4. A XORPut vonalrajzolási mód beállításával elérhető, hogy könnyen visszaállíthassuk a marker alatti képeket annak elmozdulásakor. Elegendő ugyanott újrarajzolni a markert, és máris előtűnik az a kép, amelyre rákerült a kirajzoláskor. 1 A vonalrajzolási mód beállítása a SetWriteMode(XORPut) utasítással történik. A rajzolásmód figyelembevételével működik a Line, a LineTo, a Rectangle, de nem így a PutPixel és a Circle L. a Turbo Grafika súgóját. 5. A Free Pascal esetén két ablakban fut az alkalmazás: egyik a normál konzolablak, a másik a grafikus ablak. Mivel a beavatkozás műveleteit (ReadKey, KeyPressed) szokásosan a Crt unit tartalmazza, ezért a beavatkozáshoz a konzolablakot kell aktívvá tenni, ekkor viszont részben takarva lesz a főszereplő ablak. Ezen segíthetünk a WinCrt unittal. Azonban fontos a Crt, WinCrt sorrendje a Uses sorban: előbb legyen a Crt. Először megírandó a markert kezelő unit (MarkerUn.pas néven)! E unitra építve a fent körvonalazott egyszerű feladatot az alábbi program megoldja. (Letöltheti a Marker.pas-t.) AZ ELSŐ PRÓBAPROGRAM 1 2 3 4 5 6 7 8 9 10 11 12 Program Markerek; (* Markerek témához próbaprogram. Egy marker kezelése. Egy marker kezelése: mozgatás, nagyítás/kicsinyítés, típusváltás. A marker típusa (alakja) és billentyűje: * "pont" -- 0 * "+" -- 1 * "rombusz" -- 2 * "X" -- 3 * "nyíl" -- 4 *) 1 Kitalálható, hogy e rajzolási mód hátterében a pixelek színbitjeinek XOR ( kizáró-vagy ) művelete húzódik, amely mint köztudomású saját maga inverz művelete. 2

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Uses {$IFNDEF FPC -- TurboPascal} Newdelay, {hogy ne szálljon el a Crt-ben} {$ENDIF} Crt, {$IFDEF FPC -- FreePascal} WinCrt, {hogy a GUI-ban billentyűkkel lehessen vezérelni; Crt után!!!} {$ENDIF} Graph, MarkerUn; Const path='c:\langs\bp\bgi\' ; ESC=#27; Le=#80; Fel=#72; Bal=#75; Jobb=#77; Var bfx,bfy,jax,jay:integer; {rajzterület} mk :TMarker; ch :Char; x,y :Integer; meret:integer; Procedure Karkezd; Begin Window(1,1,80,25); TextBackGround(Green); ClrScr; Procedure Szovegesre; Begin CloseGraph; RestoreCrtMode; Procedure Grafikusra; Var gd,gm:integer; Begin gd:=detect; gm:=0; InitGraph(gd,gm,path); SetBkColor(Green); ClearDevice; SetLineStyle(SolidLn,0 2,ThickWidth); Rectangle(2,2,GetMaxX-2,GetMaxY-2); bfx:=5; bfy:=5; jax:=getmaxx-5; jay:=getmaxy-5; SetWriteMode(XORPut); 2 Ez a paraméter a vonalmintázat, amelynek szerepe csak az első paraméter UserBitLn esetében van. 3

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 Begin {főprogram} Karkezd; Grafikusra; x:=getmaxx Div 2; y:=getmaxy Div 2; meret:=8; SetMarker(mk,MT_Plusz,meret,Red,x,y); Marker(mk,x,y); {marker kirajzolása} Repeat ch:=readkey; Marker(mk,x,y); {a régi marker levétele} Case ch of '0'..'4': SetMarkerType(mk,TMarkerType(ord(ch)-ord('0'))); '+': Begin meret:=meret+1; {alighanem célszerű lenne korlátozni!!!} SetMarkerSize(mk,meret); '-': if meret>1 then Begin meret:=meret-1; SetMarkerSize(mk,meret); #0: Begin {funkció billentyűk esetén} ch:=readkey; case ch of Le: Begin If (y+meret<=jay) then y:=y+meret; Fel: Begin If (y-meret>=bfy) then y:=y-meret; Bal: Begin If (x-meret>=bfx) then x:=x-meret; Jobb: Begin If (x+meret<=jax) then x:=x+meret; {Case} Marker(mk,x,y); {a marker újbóli kirajzolása -- az új állapotában} Until ch=esc; Szovegesre; End. 4

FEJLESZTÉSEK A marker unitját felhasználva készítse el a következő változatokat! 1. Egyidejűleg két marker legyen látható és vezérelhető (az egyik aktív, másik inaktív ). A markerek közötti váltásra a TAB-billentyű legyen használható. A két marker funkcionális (aktív/inaktív) megkülönböztetése történjen színnel. 3 (Kipróbálhatja: Marker2.exe.) 1. ábra. Kezdőállapot. 3 Megoldásnál a próbaprogramot úgy kell módosítani, hogy mindig az éppen aktív marker paraméterei legyenek kéznél (azaz az alapmegoldáshoz képest sok Get-es műveletre lesz szükség.) 5

2. Folytassuk a következővel: a két markert egy gumiszalag-szerű vonal állandóan kösse össze, amelyet ENTER-rel rögzíteni is lehet. Így egyenes szakaszokból ábrát is lehet rajzolni. A gumiszalag és a rögzített vonal színe (esetleg mintázata is) legyen eltérő. (Kipróbálhatja: Marker3.exe.) 2. ábra. Vonalazás közben. 6

3. Bővítsük azzal, hogy további fajta alakzatokat is lehessen rajzolni. Pl. K -val kört, D -vel dobozt, és természetesen V -vel egyenes vonalat. Az aktuális alakzatot ENTER-rel lehet rögzíteni. A körív-rajzolás csak a Line-ra visszavezetve megy, ui. a CIRCLE-re a XORPut nem hat! Ezért az egyik korábbi gyakorlaton készített körív-rajzoló eljárást itt be kell építeni a programba. (Kipróbálhatja: Marker4.exe.) 3. ábra. Rajzolás közben. 7

4. További bővítés lehetne a tartományszínezés. A lényeg, hogy a megrajzolt alakzatok vonalszínnel határolt tartományait kitöltő színnel lehessen színezni. Ehhez fel lehet használni a Turbo Grafika FloodFill(x,y,vonalSzin) eljárását. 4 Természetesen nincs akadálya annak sem, hogy a korábbi gyakorlat tartományfestő eljárásainak valamelyikét itt felhasználhassuk. Problémák a tartományszínezéskor: a markerek ne látsszanak, mert a színezést megzavarják, pl.: o eltűnik a tartományba eső részük (és az újrarajzolásnál csonkulnak), o miattuk nem lesz zárt a tartomány (és kifolyik a szín a tartományból) egyetlen aktív marker, ezért nincs gumi alakzat a végleges ábrát a tényleges vonalszínnel rögzíteni kell, o azaz ne XORPut módon, hanem NormalPut módon kerüljön kirajzolásra, de a markerek e közben se látsszanak, mert a marker-újrarajzolás nem kívánt nyomot hagy. A háttérszínt célszerű a legsemlegesebb színre (feketére) változtatni. Kipróbálhatja: Marker5.exe. 4. ábra. Rajzolás közben. 4 L. még a következő Turbo Grafika fogalmakat: Type FillPatternType; Procedure GetFillPattern(pattern), SetFillPattern(pattern,rajzSzin). 8