GÁBOR DÉNES FŐISKOLA MŰSZAKI INFORMATIKA ALKALMAZÁSFEJLESZTÉS SZAKIRÁNY DIPLOMADOLGOZAT

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "GÁBOR DÉNES FŐISKOLA MŰSZAKI INFORMATIKA ALKALMAZÁSFEJLESZTÉS SZAKIRÁNY DIPLOMADOLGOZAT"

Átírás

1 GÁBOR DÉNES FŐISKOLA MŰSZAKI INFORMATIKA ALKALMAZÁSFEJLESZTÉS SZAKIRÁNY DIPLOMADOLGOZAT SOPRON 2009

2 GÁBOR DÉNES FŐISKOLA MŰSZAKI INFORMATIKA ALKALMAZÁSFEJLESZTÉS SZAKIRÁNY Digitális terepmodell alkalmazása a mérnöki gyakorlatban Sorszám: 0083/2009 Készítette: Primusz Péter hallgató Konzulens: Dr. Markó Gergely, PhD. egyetemi docens SOPRON 2009

3 Nyilatkozat Alulírott Primusz Péter, a Gábor Dénes Főiskola hallgatója kijelentem, hogy ezt a dolgozatot meg nem engedett segítség nélkül, a magam erejéből készítettem el, és a dolgozatban csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. A dolgozat írásos részeinek (beleértve a képeket és az ábrákat is) felhasználásához hozzájárulok. Sopron, január 10. Primusz Péter

4 Tartalom 1. Bevezetés Témaválasztás A dolgozat felépítése A grafikus rendszerek felépítése A számítógépes grafika a mérnöki gyakorlatban Az információs rendszerek felépítése Modellalkotás Raszteres adatmodell Vektoros adatmodell Domborzatmodellek Raszteres domborzatmodellek Vektoros domborzatmodellek A mérnöki tervezőrendszer és a DEM A DEM mint munkaeszköz A mérnöki tervezőrendszerek DEM funkciói Adatbetöltés Adatelőkészítés Interpolációs felület előállítása Profilszámítás Szintvonalak levezetése Láthatósági vizsgálat Felszín és térfogatszámítás Megjelenítő funkciók Egyéb szolgáltató rutinok Matematikai alapok Vektor Vektorok összeadása és kivonása Vektorok skalárral történő szorzása Vektorok hossza Vektorok skaláris szorzata Vektorok vektoriális szorzata

5 3.2 Homogén koordináták Mátrixok A felületi normális általános számítása A baricentrikus rendszer Interpoláció Lineáris interpoláció Bikubikus felületfoltok (patchek) DEM modellek és algoritmusok A geometria és a topológia szétválasztása Poligonokkal határolt felületek Szárnyas él adatstruktúra Négy-él és háromszög topológia Csomópont-háromszög topológia Magasságmezők és terepadatok betöltése Szabályos (RSG) háromszög hálózat Magasságbecslés Hossz- és keresztmetszetek előállítása Szintvonalas ábrázolás Az RSG modell felületi normálisa Lejtés és lejtésirány Megvilágítás A semleges vonal és alkalmazási lehetősége Vízgyűjtő és vízválasztó vonalak meghatározása DEM alapján Szabálytalan (TIN) háromszög hálózat TIN felületmodell előállítása A TIN modell felületi normálisa Profilszámítás TIN modellből Szintvonal generálás TIN modellen belül TIN előállítása RSG-ből Programtervezés A.NET fejlesztőkörnyezet A Common Language Runtime (CLR)

6 5.1.2 A natív és menedzselt kód versenye A grafikus hardver programozása Az Openg Graphics Library OpenGL.NET környezetben Az interaktív kommunikáció A gumivonal technika Rajzolás az OpenGL-ben Osztály hierarchia A DrawingArea UserControl Matematikai osztályok Geometriai osztályok Rajzolással kapcsolatos osztályok DEM osztályok A Drawing Interchange Files (DXF) formátum Összefoglalás Irodalom Köszönetnyilvánítás Melléklet

7 1. Bevezetés A diplomamunka fő célja egy olyan jövőbeli vektorgrafikus szoftver alapjainak megteremtése, ami lehetővé teszi a mélyépítésben dolgozó mérnökök számára a felmért mérési eredmények feldolgozását és megjelenítését. Mivel a mélyépítőmérnökök mindig adott domborzati viszonyokhoz igazodnak, ezért a digitális terepmodellek nélkülözhetetlenek munkájukhoz. A szoftver tervezése során a fő cél a tervezési terület digitális háromdimenziós reprezentációjának megvalósítása és a szükséges információk kinyerése a további tervezéshez (esésviszonyok, szintvonalak, metszetek, stb.). Természetesen a programfejlesztés egy hosszú folyamat. Első szakaszában a kiválasztott feladattal kapcsolatos irodalom felkutatása és feldolgozása a legfontosabb. Ez nagyszámú nyomtatott és elektronikus szakirodalom áttanulmányozását jelenti. Jelen dolgozat is ennek a munkának az eredménye. A szakirodalom alapos vizsgálatát az algoritmus tervezése, programozása és tesztelése követi. A tesztek eredménye alapján sokszor a program, máskor pedig az algoritmus javítása, módosítása következik, amelyet újabb tesztek követnek. A megfelelő minőség elérése után az utolsó fázis az algoritmusok összedolgozása. Az algoritmusokból eljárások majd az eljárásokból programmodulok építése. A kész programmodulokból már könnyedén összeállítható a végleges termék, amelyet már konkrét feladatok megoldására is fel lehet használni. A fentiekből is látható, hogy a feladat nagysága és az idő rövidsége nem teszi lehetővé a téma teljes körű tárgyalását. Ezért a dolgozat célja az, hogy bemutassa a terepmodellező motor felépítésének folyamatát, a tervezési, és implementálási fázisokat, a.net és az OpenGL közötti alapvető kapcsolat megteremtésétől, egészen a végső, összetett osztályhierarchia megalkotásáig. Vagyis cél a legalapvetőbb algoritmusok és osztályok bemutatása, amelyek segítségével a síkbeli és térbeli modellezés megvalósítható, de nem cél egy végleges kiforrott program kifejlesztése. Remélem, hogy dolgozatom segítséget nyújt majd a téma iránt érdeklődőknek, az elméleti tudnivalók terén annyira, mint a gyakorlati megvalósításnál, amely alapján bárki, aki jártas a grafikai és geometriai programozásban, könnyen elkészíthesse ezeket az algoritmusokat. 5

8 1.1 Témaválasztás Egyetemi tanulmányaimat a Nyugat-magyarországi Egyetem Erdőmérnöki Karán kezdtem el, ahol az erdő és a természet szeretete mellett a műszaki és gazdasági ismeretek is fő hangsúlyt kaptak képzésem során. Így ismerkedtem meg a geodéziával, a térinformatikával, majd később az erdőfeltárás és az erdészeti úttervezés felé fordult érdeklődésem. Tanulmányaim befejezése után a Geomatikai, Erdőfeltárási és Vízgazdálkodási Intézetben kezdtem el dolgozni, mint tanszéki mérnök. Ez lehetőséget adott arra, hogy átéljem a mérnöki alkotás minden nehézségét, örömét és szépségét. A felmerülő problémák folyamatosan serkentették az informatikai fejlesztéseket az Intézeten belül. Így tehát mint fiatal erdőmérnök, aki nyitott az informatika világára, természetszerűen adódott a téma: kidolgozni egy olyan szoftver alapjait, amellyel hatékonyan megvalósítható a terepmodellezés és így az erdőfeltárással és az erdészeti útépítéssel kapcsolatos tervezési munkák és fejlesztések is. A témaválasztást tovább bátorította az a tény, hogy az Intézet keretein belül már léteztek olyan szoftverfejlesztések, amelyek fejlesztőivel mindennapos munkakapcsolatban álltam. Ilyen pl. a macadam úttervező program, amelyet Dr. Markó Gergely, valamint a DigiTerra Map térinformatikai szoftver, amelyet Dr. Czimber Kornél vezetésével fejlesztenek. Így a szakmai konzultáció és a segítség biztosítottnak látszott. 1.2 A dolgozat felépítése A dolgozatot öt fő részre lehet tagolni: 1. Az első részben a modellezéssel általánosságban foglalkozom, majd a legelterjedtebb domborzatmodelleket mutatom be. 2. A második rész a mérnöki tervezőrendszerek és a domborzatmodellek kapcsolatát mutatja be. Általánosságban tárgyalja a mérnöki programok legszükségesebb funkciókészletét és a domborzatmodellekkel kapcsolatos legelterjedtebb eljárásokat. 3. A harmadik rész a szükséges matematikai alapokat tárgyalja, amelyek nélkülözhetetlenek egy vektorgrafikus program számára. 4. A negyedik rész a domborzatmodellekkel kapcsolatos algoritmusokat tárgyalja részleteiben. 5. Végül az ötödik nagy rész a tárgyalt fejezetek informatikai megvalósítását mutatja be. 6

9 1.3 A grafikus rendszerek felépítése A hardver- és szoftvergyártók a felhasználók nyomására szabványosítani kezdték a programoktól független hardver elemeket. A grafikus rendszereket három fő részre bontották [Lázár, 2002]: 1. felhasználói rendszer 2. szabványos grafikus programcsomag 3. grafikus hardver Az egyes részek közötti kapcsolatot szabványos interfészekkel hozzák létre. Ezeknek a moduloknak a fejlesztése egyenként is megvalósítható. Egy újabb, jobb vagy alkalmasabb szoftver vagy eszköz nem vonja magával az egész rendszer cseréjét. A rendszer felépítését a kép megjelenítéséig az 1. ábra mutatja. Felhasználói programrendszer adatstruktúrája Grafikus programcsomag adatstruktúrája Grafikus periféria adatstruktúrája 1. ábra. A grafikus rendszer felépítése Ez a transzformáció információveszteséggel jár. A minőségromlást az alábbi példával lehetne jól szemléltetni: a felhasználói programrendszer pontos kör definíciójából a grafikus programcsomag már egy egyenes szakaszokból álló poligont készít, ebből a megjelenítéskor már csak egy pixelhalmaz marad. 1.4 A számítógépes grafika a mérnöki gyakorlatban A közelmúltban még oly megszokott tervezőirodai hangulat és látvány (papírtekercsek és vonalzók sokasága) már lassan feledésbe merül. A klasszikus irodákat felváltja a digitális, ahol a dokumentációk nagy része már csak elektronikus formában van jelen [Lázár, 2002]. Az előnyeit könnyű belátni, helytakarékos és a munkák elvégzése valamint javítása sokkal gyorsabban történik. Azért, hogy a számítógépes programokban is könnyen otthon érezzük magunkat megfigyelhetőek az irodaszerek leképezései. Az AutoCAD tervezőprogramban például a ceruzának a szálkereszt, a körzőnek, radírnak, vonalzónak parancsok, míg a pauszpapírnak a rétegek felelnek meg. Ezeknek az eszközöknek az ismerete esetén a rajzolás és tervezés sokkal könnyebb és gyorsabb. Az építőmérnökök munkájához a rajzeszközökön kívül még a térképek és a térbeli adatokhoz köthető információk is szükségesek. Az olyan grafikus rendszert, 7

10 amely a földdel, mint közvetlen környezetünkkel foglalkozik, geoinformációs rendszernek nevezzük. Összefoglalva azt mondhatjuk, hogy a számítógépes grafika és az információs rendszerek együttese jelenti azt az alapot, amit a mérnöki munka minden fázisa megkíván. 1.5 Az információs rendszerek felépítése Az információs rendszerek a 2. ábra alapján alapvetően három alkotóelemből állnak [Detrekői, 1997]: HARDVER SZOFTVER ADATOK 2. ábra. Az információs rendszerek alapelemei Az előző ábrát gondolatban kiegészítve, a felhasználókat is az információs rendszer alapelemei közé sorolhatjuk. Az alkotóelemeket ábrázoló piramis jól szemlélteti az információs rendszerben szereplő adatok fontosságát, hiszen a rendszer használhatóságát alapvetően az abban szereplő adatok mennyisége és minősége határozza meg. Az információs rendszer kialakításának tervezésekor először a tárolandó feldolgozandó megjelenítendő adatok körét kell tisztázni, a további építőelemek kiválasztása csak ezután következhet. Az összegyűjtött adatok feldolgozásához és megjelenítéséhez megfelelő számítógépes programokra van szükség. A szoftverkörnyezet kiválasztásakor elsődleges szempont, hogy az a megjeleníteni kívánt adatokat kezelni tudja, figyelembe véve a tárolandó információk mennyiségét is. Ezen alapvető követelményt teljesítő rendszerek közül a következő szempontok szerint választhatunk: információcsere lehetősége a felhasználó meglévő szoftvereivel, külső partnerek által szolgáltatott adatok formátumai, külső partnereknek szolgáltatandó információk formátuma, ágazati szabványok figyelembevétele stb. A hardverelemek kiválasztása célszerűen az előző lépéseket követően történik meg, hiszen így az elhamarkodottan beszerzett hardver eszközök esetleges gyengeségei nem korlátozzák az ideális szoftver megfelelő alkalmazhatóságát, ezáltal lehetőség nyílik az adatok teljeskörű feldolgozására, vagyis információs rendszerünk kialakításával elérjük kitűzött céljainkat. 8

11 1.6 Modellalkotás Modellalkotás során megpróbáljuk a valós objektum lényegi jellemzőit megragadni, és az így absztrakcióval képzett számítógépes modellt algoritmusokkal feldolgozni. A számítógépes grafikában feldolgozott grafikus objektumokat matematikai eljárásokkal írjuk le. Ezeket a függvényeket két vagy három dimenzión értelmezhetjük. A térbeli információkkal dolgozó rendszerekben a helyzeti adatok ábrázolásának (tárolásának) két nagy csoportját különböztetjük meg, ezek a szabályos (raszter) és szabálytalan (vektor) geometriai modellek Raszteres adatmodell A raszteres modellek a területet szabályos geometriai elemekre osztják (pixelek). A raszteres adatmodellnek általában a négyzet az alapja, ami jól igazodik a raszteres megjelenítőkhöz is. Az adatmodellt felépítő elemi pixelek egy-egy adott területet fednek le. A pixelek értékeit tematikus kódoknak nevezzük, ezekkel jellemezzük a pixel által lefedett területet. A nulla értékkel feltöltött pixelek az üres (adathiányos) területeket jelölik. A pixelek rácsszerűen, sorokban és oszlopokban helyezkednek el. Az adatmodell az egyes pixelek felsorolásán, valamint a sorok és oszlopok számának megadásán túl olyan lényeges információkat is tartalmaz, amelyek a vizsgált terület vetületi rendszerbe illesztését teszik lehetővé. Ezek az úgynevezett georeferencia adatok a pixelek által lefedett terület mérete, és a raszter egy pontjának (pl. bal felső pixel közepe) koordinátái. A raszteres adatmodellben a pixelek közötti térbeli kapcsolatok egyértelműek, ezeket nem kell külön tárolni [Czimber, 1997]. A raszteres adatmodell nagyon jól használható domborzatmodellezésre, illetve szorosan összefonódott a távérzékelési technológiákkal (műholdképek, légifényképek, ortofotók). Használata abban az esetben indokolt, ha nagy területről egyenletes sűrűségben kívánunk információkat tárolni Vektoros adatmodell A vektoros adatmodell esetében a földrajzi objektumok helyzetét szabálytalan geometriai elemekkel írjuk le. A földrajzi objektumok leírása általában négy geometriai elem segítségével történik. Ezen négy alapelem a pont, vonal, poligon és a térbeli felület. A vektoros adatmodell az ábrázolandó objektumok lényegi információit tartalmazza. A tárolandó adatmennyiség rendszerint töredéke a raszteres adatmodellel történő adatábrázoláshoz képest. A vektoros adatmodellben megjelenített térképi elemek kezelésére bonyolult algoritmusokat kell használni, továbbá alapvető fontosságú az objektumok szomszédsági viszonyainak korrekt ábrázolása (topológia) [Czimber, 1997]. Ez a vektoros geoinformatikai adatok elemzésében nélkülözhetetlen. A topológikus adatábrázolás alapegysége a koordinátá- 9

12 ival adott pont. A vonalakat pontok építik fel. A vonalak egymást nem metszik, csak a kitüntetett szerepű pontokban, a csomópontokban kapcsolódnak össze. Minden egyes vonal a síkot két részre osztja. A záródó vonalak területrészeket különítenek el. Ha az előbbi pont-vonal-terület építkezést követjük, akkor a topológia az egyes építőelemek közötti lépcsőfokot jelenti. A pont, vonal, poligon vektoros elemek között értelmezett topológiák közül a fontosabbak: 1. terület-vonal, 2. vonal-terület, 3. vonal-csomópont, 4. csomópont-vonal-csomópont. A vektoros adatmodellben tárolt geometriai elemekhez attribútumadatokat (szöveges, leíró adatok) rendelünk. Az egy objektumhoz rendelt attribútumok csoportját rekordnak, az azonos típusú rekordok összességét adattáblának hívjuk. Több adattábla pedig a leíró vagy szöveges adatbázist alkotja. Ennek megfelelően a leíró adatbázis struktúrája: adat > mező > rekord > tábla > adatbázis. Az adatmezők típusa lehet numerikus, szöveges, dátum, idő, logikai és csatolt objektum (fájlok, képek, hangok, dokumentumok). Az egyes mezőkre, táblákra, adatbázisokra a megfelelő névvel hivatkozhatunk. A rekordokra történő hivatkozás a rekord sorszámával, egyedi azonosítójával vagy valamilyen relációval történik. 1.7 Domborzatmodellek A mérnöki tervezési feladatok többségében a terep topográfiáját figyelembe kell venni. A földfelszín digitális kezelésére domborzatmodelleket használunk (DEM Digital Elevation Model). A digitális domborzatmodellek célja, hogy ismert magasságú pontok (támpontok) alapján tetszőleges, a DEM területére eső pontban a magasság előállítása interpolációval. Környezetünk valósághű ábrázolásával és a térbeliség érzetének visszaadásával már viszonylag korán a művészetek területén is találkozhatunk. Mire lehetővé vált, hogy a térképek digitális úton készüljenek, addigra szerte a világban számos nagy méretarányú topográfiai térképmű született (a terepi felmérés mellett sokszor légifényképpárok fotogrammetriai kiértékelésével), igen részletes szintvonal-ábrázolással. Amennyiben a szintvonalak már digitalizált, magassági értékkel ellátott vektoros adatként is rendelkezésre állnak, illetve, ha eleve így készülnek, kézenfekvő lehetőségként kínálkozik, hogy a szintvonalakból vezessük le a magassági pontokat, amelyek hálózatából azután létrehozható a felületmodell. 10

13 3. ábra. Id. Markó Károly Visegrád című festménye ( ) A DEM a modellezés folyamatában információkat szolgáltat a modellezett terep egészének vagy kiválasztott részletének lényeges sajátosságairól [Márkus, 1995]. A domborzatmodell részletességét, felépítését mindig az adott feladat szabja meg. Más léptékű és pontosságú terepmodellre van szükségünk egy vonalas létesítmény tervezése során és más struktúrájú modellt célszerű használni vízgyűjtő területek lehatárolásához vagy semleges vonalak felkereséséhez. A DEM-et alkotó támpontok elrendezése szerint megkülönböztetünk szabályos és szabálytalan elrendezésű modelleket. A szabályos elrendezésű domborzatmodellek esetén általában egy a koordinátatengelyekkel párhuzamos négyzetrács sarokpontjaiban adottak a magasság értékek. Előnye az egyszerű adatszerkezet, előszeretettel alkalmazzák hidrológiai modellezésekben. A szabálytalan elrendezésű domborzatmodellek az eredeti (pl. geodéziailag bemért) pontokra támaszkodnak. A legtöbbször egy háromszög hálózattal közelítik a terepfelszínt úgy, hogy a támpontok a háromszögek csúcsai és a háromszögek kerületösszege minimális legyen. A két fő DEM modell az adatok tárolása szerint tovább bontható, így beszélhetünk raszteres és vektoros adatmodellt alkalmazó terepmodellekről. Szabályos támpontok esetén a legelterjedtebb adatmodell a raszter, míg szabálytalan támponthálózatnál csak a vektoros alkalmazható. 11

14 4. ábra. Szintvonalas ábrázolás, vektoros és raszteres DEM Raszteres domborzatmodell esetén a magassági értékek egy rácsháló középpontjaiban adottak, a háló mindig szabályos kiosztású a sor/oszlop felépítés miatt. A modell csak a magasságértékeket tárolja mivel a helyszínrajzi pozíció egyértelmű. Vektoros domborzatmodell esetén a terep minden egyes pontját egy vektor reprezentálja. Felépítése lehet szabályos és szabálytalan. Jellemzően a magassági pontok egymással érintkező háromszögek csúcsaiban vannak. A lapok a terep felszínéhez simulnak, a csúcspontok sűrűsége tagolt felszínen általában nagyobb Raszteres domborzatmodellek A pixelértékek felületmodell esetében a pixel által lefedett terület átlagos magasságát jelentik. A modell geometriai felbontása a rácsot alkotó négyszögek sűrűségével, vagyis a terepi cellaméret csökkenésével arányosan nő, ez azonban nem feltétlenül jelent ugyanilyen mértékű minőségi növekedést. Példaként említhetjük a hazai DDM-10 és DDM-50 jelű digitális domborzatmodelleket. Mindkettő a Magyar Honvédség 1: es méretarányú topográfiai térképeinek szintvonalrajza alapján készült, csak az előbbit m-es, míg az utóbbit m-es cellamérettel (mintavételi sűrűséggel) vezették le. Később a FÖMI létrehozta az 1: es méretarányú topográfiai térképmű domborzati tisztázati rajzai alapján 5 5 m-es ráccsal készült digitális domborzatmodellt. A szabályosan elhelyezkedő rácspontok közötti pontok magasságát térbeli interpolációs módszerekkel lehet előállítani [Czimber, 1997]. Néhány eljárás: Távolsággal fordítottan arányos súlyozással. Minimális görbület alapján. Vektoros felületmodellezéssel, amikor egy olyan vektoros felületmodellt állítunk elő, amelynek kontrolpontjai a raszter celláinak középpontjaiba esnek. A térbeli interpoláció ezek után a vektoros felületmodelleknél részletezett eljárások valamelyikével történhet. A legjobb módszert ez az eljárás adja. 12

15 1.7.2 Vektoros domborzatmodellek A felületmodellek másik csoportját azok az adatstruktúrák alkotják, ahol a felületet alkotó geometriai elemek tetszőleges bonyolultsággal, szabálytalan módon kapcsolódnak egymáshoz. A csúcspontok, törésvonalak ábrázolása koordinátákkal, vektorokkal történik. Ennél az adatmodell-típusnál lényeges a térbeli kapcsolatok korrekt rögzítése, a topológia kialakítása. 5. ábra. A TIN modell A modellezés feladata a, függvény vektoros adatokkal történő minél jobb közelítése, amelynek célszerű előállítása a végeselemek módszerével történik. Az, függvényt elemi, függvényekre bontjuk olyan módon, hogy az, elemi függvények értelmezési tartományai nem fedik egymást, és összegük az eredeti, függvény értelmezési tartományát adja. A vektoros felületmodellezésben legáltalánosabban használt végeselem a három kontrolpont alkotta térbeli háromszög. A háromszögek általában szabálytalan háromszöghálót (Triangulated Irregular Network, TIN) alkotnak, de létezik szabályos hálót alkotó modell is (Regular Square Grid, RSG). Az RSG modell esetében nem szükséges a topológia. 13

16 2. A mérnöki tervezőrendszer és a DEM 2.1 A DEM mint munkaeszköz A digitális felületmodellezés fejlődése több korszakra osztható. Kezdetben a hangsúly a különböző interpolációs módszerek kidolgozásában volt [Mélykúti, 1993]. Majd a fejlesztés két fő irányt vett, az egyik a mérnöki alkalmazások elsősorban útépítési feladatok megoldása, a másik fő terület a szintvonalas térképek előállítása volt. A digitális felületmodellezés során a terep topográfiai struktúrájának beépítése a számítás geometriai modelljébe interaktív grafikus eszközök segítségével végezhető hatékonyan. Ez megköveteli bizonyos grafikus szerkesztő függvények használatát a felületmodell felállítása során. A szerkesztő függvényeken kívül grafikus megjelenítő függvények is szükségesek. A számítógéppel támogatott tervezőrendszerek (Computer Aided Design, CAD) terjedése egyre nagyobb lehetőséget biztosított az ilyen jellegű feladatok elvégzésére. A CAD rendszerek adatmodellje azonban nem volt megfelelő összetett, háromdimenziós feladatok megoldására, így a CAD jellegű függvények épültek inkább be a felületmodellező eljárásokba. A földrajzi információs rendszerek (Geographical Information System, GIS) terjedésével a helyzet megfordult. A topológiai elvű, háromdimenziós adatbázis modellek, és a grafikus szerkesztő függvények egy rendszeren belül teszik lehetővé, hogy más feladatok megoldása mellett a DEM adatstruktúrája is előállhasson. Felhasználói, fejlesztői szempontból nyitott GIS rendszerek lehetővé teszik, hogy az adatstruktúra összeállításán kívül a DEM levezetéséhez és alkalmazásához szükséges függvények is a rendszerbe telepíthetőek legyenek. Ezzel a DEM a GIS rendszerek részévé, munkaeszközévé válhatott [Mélykúti, 1993]. 2.2 A mérnöki tervezőrendszerek DEM funkciói A mérnöki gyakorlatban a tervezett, vagy üzemelő létesítmények szinte kivétel nélkül kapcsolatban vannak a terep felszínével. A számítástechnikai környezetben végzett munka ezért feltételezi a digitális terepadatok meglétét. Ebben az értelemben a DEM alapfeladata: a terep magasságának meghatározása egy olyan pontban, melyben a terepen magasságmérés nem történt. Matematikai értelemben a feladat úgy fogalmazódik meg, hogy ismert helyzetű és magasságú diszkrét pontok között számítással kell meghatározni egy tetszőleges helyzetű pontban a terep magasságát. Ez a feladat tulajdonképpen interpoláció. Mivel az adott pontok vízszintes értelmű elhelyezése szabálytalan és a pontsűrűség a terep domborzati viszonyaitól függően változó így igen sok számítási módszer alakult ki a feladat megoldására. A megfelelő interpolációs eljárás kiválasztása után egy új pont magasságát úgy határozzuk meg, hogy meg- 14

17 keressük, az új pont mely háromszögelembe esik, és az e fölött értelmezett függvény értékét az új pont helyén kiszámítva, megkapjuk a keresett magasságot. Erre az alapfeladatra vezethető vissza szinte minden, a digitális felületmodellen végezhető számítás. A DEM előállításával kapcsolatos feladatok és a vele végezhető műveletek az alábbiak szerint csoportosíthatóak: 1. adatbetöltés, 2. adatelőkészítés, 3. interpolációs felület előállítás, 4. szintvonalak levezetése, 5. egyéb számítások a felületmodellen, 6. megjelenítő funkciók, 7. egyéb szolgáltató rutinok. Ez a felsorolás követi a feldolgozás logikus menetét, de az interaktív környezet lehetővé teszi, hogy bármely lépést többször megismételjük, vagy egy korábbi műveletre később visszatérjünk. A programnak minden művelet megkezdése előtt ellenőriznie kell, hogy a logikus sorrendben végzett feladat végrehajtás szerinti kiinduló adatok léteznek-e vagy sem. Ha igen, a feldolgozás megtörténik, ha nem, jelzést kell kapnia a szükséges műveletek elvégzésére. A munka során bármikor információt kell tudni kapni az aktuális állapotról, mely adatállományok, pontok, struktúravonalak, stb. kerültek felhasználásra, milyen adatok számítása történt már meg Adatbetöltés Különböző struktúrájú és formátumú input állományokat kell tudni fogadni. Ezek a földmérnöki gyakorlatban szokásos adatgyűjtési technológiák adatrendszerei: 1. szórt pontok, pl. tachimetriai, GPS, 2. rácsháló, pl. hálós terepszintezés, vagy fotogrammetriai kiértékelés, 3. szintvonalak, pl. térkép digitalizálása, vagy fotogrammetriai kiértékelés. A pontokhoz tartozó adatok: pontszám, kódszám,,, koordináták lehetnek szórt pontok szerinti elrendezésnél. A pontszámok és kódszámok célszerű alkalmazásával lehetőség van már méréskor a struktúra vonalak definiálására. A rács és szintvonal szerinti pontformátum a technológiához illeszkedő, célszerű adattárolási struktúrát tesz lehetővé. A domborzati struktúra vonalakat ebben az esetben az adatelőkészítési fázisban lehet definiálni Adatelőkészítés Az adatelőkészítés a munkaterület lehatárolásával kezdődik. A feldolgozásban csak a lehatárolt területen belül lévő pontok vesznek majd részt. A munkaterületen belül lehet összeállítani a domborzati struktúra vonalakat. Ez történhet interaktívan, a képernyőn való rámutatással, már egy adatbázisban tárolt 15

18 pontszámok alapján, vagy méréskor célszerűen megadott pontszámok segítségével. Az adatok betöltése és a struktúra vonalak összeállítása után lehet a feldolgozás alapját képező háromszöghálót generálni. A háromszögháló kialakítása a domborzati struktúra vonalak figyelembevételével történik, ami azt jelenti, hogy a struktúra vonalak feltétlenül háromszög oldalak lesznek. Erre azért van szükség, mert a számítási módszer csak ebben az esetben tudja a domborzat jellemző tulajdonságait mint peremfeltételeket figyelembe venni. A levezetetett háromszögháló megjeleníthető a képernyőn, és kedvezőtlen háromszög konstrukció esetén a felbontás interaktív módon módosítható Interpolációs felület előállítása A háromszögháló levezetése után kerül sor az interpolációs felület számítására. Ebben a lépésben számítjuk a háromszög elemek felett értelmezett harmadfokú polinomok együtthatóit, azzal a feltétellel, hogy a szomszédos polinomok folytonosan csatlakozzanak egymáshoz a háromszög oldalak mentén. Ezzel a művelettel előáll a tulajdonképpeni digitális felületmodell, melyen a felhasználó számára szükséges különböző feladatok elvégezhetőek Profilszámítás Az előző funkció kiterjesztése egy pontról adott, görbe struktúrájú mértani helyre, azaz meghatározandó, és esetenként metszetként kirajzolandó adott síkgörbe mentén a függvény értéke (a felszín magassága). Legyen a mértani hely ívhosszparaméter szerint, formában paraméterezve, akkor a, függvény írja majd le a profilt, ami általában nem fejezhető ki zárt formában, vagyis meg kell elégednünk egy közelítő meghatározásával, annál is inkább, mert a felszínt leíró függvény is csak becslés. Ha a mértani hely (jellemzően poligonként adott, akkor a görbe ívhossz szerint paraméterezhető ugyan, de végeselemes becslés esetén a függvény mégis szakaszonként eltérő analitikus tulajdonságait (folytonosság, differenciálhatóság) Szintvonalak levezetése A DEM-el kapcsolatos tipikus feladat a terep szintvonalainak levezetése. A számítás során az alábbi paraméterek beállítását kell elvégezni: 1. alapszintköz értéke, 2. főszintköz értéke, 3. sűrítési faktor beállítása, mely meghatározza a levezetett szintvonal pontjainak mennyiségét, ez a rajzi minőséget is befolyásolja. A szintvonalak DEM-ből történő levezetésnek két fő célja lehet: a magassági adatok felületszerű vizuális ellenőrzése, a terep szintvonalas térképének elkészítése. 16

19 A DEM ellenőrzéséhez készített szintvonalrajznak a lehető legegyszerűbbnek kell lennie. Egyrészt azért, hogy gyors legyen, másrészt azért, hogy a DEM hibáinak kimutatását a szintvonal levezetés esetleges hibái, ill. mesterséges simítófaktorok ne tegyék bizonytalanná. Ezért célszerű erre a célra az eredeti DEM adatokra támaszkodó lineáris interpolációs módszert választani. Egy térkép szintvonalainak elkészítésekor a geometriai hűségen túl esztétikai követelmények is felmerülnek. Ez úgy érhető el, hogy a DEM-ből levezetett szintvonalak pontjait sűrítjük, simítjuk. Általában ezt a műveletet úgy végzik, hogy a levezetett szintvonalpontokra valamilyen görbét illesztenek 3. vagy 5. fokú polinom, spline, Akima-interpoláció, stb.) és ennek a görbének a pontjait számítjuk a rajzi méretaránynak megfelelő sűrűségben. A pontok sűrűségét az határozza meg, hogy a rajzi méretarányban a pontokat egyenessel összekötve, a szintvonal folytonos görbe vonalnak hasson. Ezzel az egyes szintvonalak szépen kirajzolhatók, gond akkor jelentkezik, ha a szomszédos szintvonalak közel futnak egymáshoz, és a görbe illesztésekor a szintvonalpontokon túl nyúlik a levezetett görbe vonal. Ekkor a szomszédos szintvonalak átmetszik egymást, hiszen a simításkor egyedi vonalként kezelve őket, egymásról már nincs semmilyen információjuk. Ezért azt a módszert célszerű alkalmazni, amikor a terepfelszín közelítő függvényét határozzuk meg oly módon, hogy belőle tetszőleges sűrűséggel és minőségben levezethetők legyenek a szintvonal pontjai. Ebben az esetben magát a felületet határozzuk meg olyan minőséggel, hogy abból levezetett szintvonalak nemcsak a geometriai, hanem az esztétikai követelményeket is ki tudják elégíteni. Erre nyújt lehetőséget a véges elemek módszerének itt ismertetett megoldása, amikor is a háromszögeken belül értelmezett, a szomszédos háromszögek polinomjaihoz folytonosan illeszkedő harmadfokú polinomokból a szintvonalpontok tetszőleges sűrűségben levezethetőek. A közvetlenül a felületet közelítő függvényekből levezett megfelelő sűrűségű szintvonalpontok esetén nem fordulhat elő, hogy a szintvonalak átmetszik egymást, hiszen a közelítő felület egyértékű függvény Láthatósági vizsgálat Ha a feladatot a felszín két pontjára korlátozzuk, a megoldás metszetképzéssel illetve profilszámítással elérhető, azaz eldöntethető, hogy a két pont között vane rálátás. A feladat azonban sokszor ennél általánosabb formában fogalmazódik meg, pl. GSM vagy URH adóállomás telepítésekor meghatározandó a torony magassága úgy, hogy adott körzeten belül az adásvételi lehetősége a 90%-ot elérje. Ez a feladat rácsbázisú RSG felhasználásával a következőképpen oldható meg: 17

20 1. Minden rácsponthoz hozzárendelünk egy láthatósági tényezőt, ami azt fejezi ki, hogy a támpontból a rácspont irányába húzott szélső helyzetű látósugártól a rácspont milyen messze van. 2. A pozitív érték jelöli, hogy a rácspont mennyivel található a látósugár felett (vagyis látható), míg a negatív tényező azt jelenti, hogy a rácsponton ennyit kellene emelni ahhoz, hogy a támpontból látható legyen. 3. Nyilvánvaló, hogy az így levezetett láthatósági rácsmodell 0 magasságú szintvonala határolja el egymástól a támpontból látható, illetve árnyékban maradt területeket, vagyis lehetővé teszi a besugárzott terület nagyságának megállapítását is. A fenti eljárást iterációban alkalmazva a torony kívánatos magassága megállapítható úgy, hogy a besugárzott terület előre adott nagyságú legyen Felszín és térfogatszámítás Az analízisből ismert tétel értelmében a, képlettel megadott felület felszínét síktartományon az integrál, térfogatát pedig 1, integrál szolgáltatja. A felszín végeselem interpolációjakor a fenti képletek mindegyik végeselemre külön-külön számítandók az aktuális becslő függvények behelyettesítésével. Ha, függvény polinom, akkor a térfogat képlet helyettesíthető, összefüggéssel, ahol a tartomány területe,, pont pedig a súlypontja. Ilyen jellegű számításokat számos CAD program igényel az úttervezéstől a bányászatig Megjelenítő funkciók A mérnöki tervezések során mindig követelmény volt a tervezés részleteinek és végül a kész tervnek a térbeli láttatása. A tervezés többnyire a kétdimenziós térképen, kótás projekcióban folyik. A létesítményről ezen kívül szelvények, metszetek készülnek, esetleg a végeredményről, vagy annak néhány variánsáról axonometrikus kép. A perspektív ábrázolásmód közelíti legjobban a valóságot, ez alapján lehet legjobban megítélni, hogy a tervezett létesítmény hogyan 18

21 illeszkedik környezetébe. 3D interaktív számítógépes tervezés során mind a hagyományos 2D, mind a 3D láttatások már tervezés folyamán alkalmazhatók. A variánsokat, akár csak az egyes ötleteket rögtön meg lehet nézni 3D-ben és utána elfogadni, tovább finomítani, vagy elvetni. Az interaktív tervezés folyamán alkalmazható megjelenítési módszerek fő csoportjai [Mélykúti, 1993]: 1. vízszintes vetületi rajzok, 2. metszetek, 3. perspektív ábrázolás, 4. térhatású képek, 5. tematikus ábrák. Az egyes csoportokon belül további lehetőségek kínálkoznak. Vízszintes vetületi rajzok készülhetnek az alábbiak szerint: 1. szelektív pontvázlat a számításba bevont pontokról, 2. pontvázlat a levezetett pontokról, 3. háromszögháló megjelenítése, 4. domborzat struktúra vonalainak szelektív megjelenítése, 5. levezetett szintvonalak kirajzolása. Metszetek készülhetnek: 1. két kijelölt pont között tetszőlegesen megválasztható közbenső pontsűrűséggel, 2. előre definiált keresztszelvények mentén. Perspektív ábrázolásmódot használhatunk a háromszögháló, a szintvonalak, vagy a felület színsávozásos megjelenítésére. A megjelenítés valamennyi paramétere szabadon megválasztható: 1. nézőpont térbeli koordinátája, 2. iránypont térbeli koordinátája, 3. szemlélés iránya a vízszintes síkban, 4. a szemlélés irányának magassági szöge, 5. látószög megválasztása. Ezen túl a megjelenítéshez a további paraméterek adhatóak meg: 1. szintvonalak értékköze, 2. szintsávok magassági intervalluma, 3. -tengelyirányú méretarány változás, 4. hálóvonalak láttatása vagy letiltása. Térhatású képek szerkeszthetőek az anaglif térláttatás módszere szerint 3D szerkezetű testekről, ha színes grafikus képernyő áll rendelkezésünkre. 19

22 6. ábra. 3D DEM modell anaglif ábrázolása (DigiTerra Map) Egy képernyőn jelenik meg egymás mellett a tárgy két anaglif képe, és egy két színű szemüvegen keresztül szemlélve, a tárgy térhatású képét láthatjuk. Testmodellezés, árnyékplasztika módszerével a tárgyak geometriailag megszerkesztett drótvázas modelljét, csontvázát, tehetjük szemléletesebbé. A tárgyak felszínét a láthatóság és a megvilágítás figyelembe vételével kiszínezi a program, ezzel plasztikus térbeli hatást eredményez [Mélykúti, 1993]. Tematikus ábrák szerkesztésével bővíthető a programrendszer megjelenítő eszköztára. Ezek a megjelenítések a konkrét felhasználói igényektől függően változatosak lehetnek: 1. vízgyűjtő területek lehatárolása, 2. lejtőkategória térkép szerkesztése, 3. besugárzási, láthatósági térképek szerkesztése, stb Egyéb szolgáltató rutinok A munkakörnyezet beállítását célfüggvények segíthetik: 1. színtáblázat beállítása, 2. színek hozzárendelése vonaltípusokhoz, 3. grafikus képernyő törlése, 4. interaktív pontazonosítás, kereső kör méretének beállítása, 5. pontszám tartományok beállítása az automatikus vonal összeállításhoz. 20

23 3. Matematikai alapok Adott egy sor térbeli adat diszkrét pontok formájában, találja meg azt a függvényt, ami a legjobban tükrözi a modellezett felszínt, és ami becsli a nem mért pontok értékeit. (Lam, 1983) A következő fejezetben áttekintünk néhány matematikai konstrukciót, amelyek nélkül a számítógépes grafika és így egyetlen egy mérnöki alkalmazás tárgyalása sem képzelhető el. A fejezetben a vektorok és mátrixok elméletéről lesz szó. A témát nem tárgyaljuk teljes részletességgel mivel számos irodalom áll rendelkezésre az érdeklődő számára [Scharnitzky, 1999]. A fejezet célja a szükséges matematikai ismeretek áttekintése a bemutatásra kerülő algoritmusok megértéséhez. 3.1 Vektor A dolgozat további részeiben a vektor vagy pont fogalom mindig a háromdimenziós euklideszi tér egy pontját jelenti, amelyet 3 koordinátával írhatunk le:,,. Ugyanezt a pontot jellemezhetjük az origóból a pontba mutató helyvektorral is. Implementáció szempontjából a pont és a vektor ugyanazon adatszerkezettel kezelhetők, hiszen mindkettőt három darab lebegőpontos értékkel adhatjuk meg [Szakács, 2008]: ahol,, a pont koordinátái.,, Vektorok összeadása és kivonása Legyenek adottak,, és,, háromdimenziós vektorok. Ekkor a két vektor összegén, illetve különbségén a következőket értjük:,,,, Vektorok skalárral történő szorzása Legyen,, háromdimenziós vektor, valós szám. Ekkor a vektor skalárral történő szorzása,, 21

24 3.1.3 Vektorok hossza Egy,, háromdimenziós vektor hosszán a következő kifejezést értjük: Ez megegyezik a vektor euklideszi normájával. Egy vektort normalizált vektornak nevezünk, ha Vektorok skaláris szorzata Legyenek adottak,, és,, háromdimenziós vektorok. A két vektor skaláris szorzatán a A skaláris szorzat meghatározható a következő módon is: A skaláris szorzat eredménye egy szám lesz. A fentiekből látszik, hogy a két vektor által bezárt szög meghatározható a következő módon [Kovács, 2008]: Ha és egységvektorok, akkor skaláris szorzatuk egyenlő a köztük által bezárt szög koszinuszával, ha pedig és merőlegesek egymásra, akkor skaláris szorzatuk Vektorok vektoriális szorzata Két vektor vektoriális szorzatának az eredménye egy a két vektorra merőleges vektor, melynek hossza cos valamint az,, jobbsodrású rendszert alkot.,, A vektoriális szorzatot csak a háromdimenziós térben értelmezzük. 3.2 Homogén koordináták A háromdimenziós térben egy pont koordinátáját három adat segítségével tudjuk meghatározni. Homogén koordináták esetén a tér pontjai rendezett számnégyesekkel lesznek leírva, amelyek az arányosság erejéig vannak meghatározva. A (0, 0, 0, 0) koordinátájú pont nem létezik [Kovács, 2008].,,,,, 22

25 Szinte minden transzformáció elvégezhető a transzformációs mátrixok szorzásával, kivéve az eltolást (transzláció). Homogén koordináták esetén viszont ezek a mátrixok 4 4-esek lesznek, így minden transzformáció elvégezhető mátrix-szorzásként is. A homogén koordináták használatának előnyei: 1. Duális tételek és definíciók használatának lehetősége. 2. Projektív geometria használatának lehetősége. 3. Végtelen távoli elemek használata (a negyedik koordináta nullának vételével). 3.3 Mátrixok Az sorból és oszlopból álló számtáblázatot -es mátrixnak nevezzük. Az 1 típusú mátrixokat sorvektoroknak, az 1 típusúakat pedig oszlopvektoroknak nevezzük. A mátrixok közötti műveletek a jól ismert módon történnek, az összeadás elemenként, a szorzás pedig sor-oszlop kompozícióval. A transzformációknál és leképezéseknél szükség van arra, hogy pontokat tudjunk szorozni mátrixokkal. Ezt egyszerűen elvégezhetjük, ha beírjuk a pontot egy oszlopvektorba, majd az adott mátrixszal balról megszorozzuk [Szakács, 2008]. Implementációs szempontból az egységes kezelhetőség érdekében a transzformációk leírása 4 4-es mátrixokkal történik. A pontok megadása inhomogén alakban történik, a kettő közötti átmenet azonban könnyen biztosítható, az alábbi módon: legyen adott egy tetszőleges,, vektor (pont) valamint egy 4 4-es mátrix. A szorzást a következőképpen érdemes implementálni: 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 A pontok homogén koordinátás reprezentációjától a plusz memóriaigény és a Descartes-alakba történő állandó konverzió okozta sebességcsökkenés miatt érdemes eltekinteni, ugyanakkor a transzformációk és leképezések egységes kezelését megkönnyíti a 4 4-es mátrix reprezentáció. Mivel ezen mátrixok utolsó sora mindig 0,0,0,1 alakú, így a fenti számítás eredménye ekvivalens azzal, mintha homogén alakban megadott pontokkal végeznénk el az szorzást, azaz helyes eredményt szolgáltat, és gyorsabb a hagyományos formánál [Szakács, 2008]. 23

26 3.4 A felületi normális általános számítása A számítógépes grafikában a felülethez tartozó pontok mellett gyakran szükség van az egyes pontokban a felület normálvektorára is (azaz a felületet érintő sík normálvektorára). Az implicit egyenlet alapján az érintősík egyenletét a felület,, pont körüli elsőfokú Taylor-soros közelítésével kaphatjuk [Szirmay et al., 2003]:,,,,,, Az,, és,, pontok a felületen vannak, így,, 0 és,, 0 ezért az érintősík egyenlete: 0 Az egyenletet az 0 egyenlettel összevetve megállapíthatjuk, hogy a felület Taylor-soros közelítésével kapott sík normálvektora éppen:,, 7. ábra. Tetszőleges felület normálisa egy adott pontban A paraméteres felület normálvektorához az izoparametrikus vonalak tanulmányozásával juthatunk. A paraméter rögzítésével kapott görbe érintőjét elsőfokú Taylor-soros közelítéssel kapjuk: A közelítést az egyenes egyenletével összevetve megállapíthatjuk, hogy az érintő irányvektora. A felületre illeszkedő görbék érintői a felületet érintő 24

27 síkban vannak, így a normálvektor a felületre illeszkedő görbék érintőinek az irányvektoraira merőleges. A normálvektor egyértelmű előállításához ki kell számítanunk mind az érintőjét, mind pedig az érintőjét, és a két érintő irányvektorainak a vektoriális szorzatát kell képezni, mert a vektoriális szorzat mindkét tényezőre merőleges eredményt ad. Az, felület normálvektora tehát [Szirmay et al., 2003]: 3.5 A baricentrikus rendszer A baricentrikus koordinátákat August Ferdinánd Moebius ( ) definiálta 1827-ben; általuk megadható a síkban egy pont helyzete egy sokszög háromszög csúcsaihoz viszonyítva. Textúra feszítésnél, ütközésdetektálásnál találkozhatunk a baricentrikus koordinátákkal a legtöbbször [Nyisztor, 2005]. Egy háromszög a, és pontok konvex-kombinációinak halmaza, azaz,, ahol,, 0 és 1 Az, és baricentrikus koordináták a következő képletek alapján számíthatók ki: és ahol a háromszög területét jelöli. Ha a három koordinátából kettő már ismert, a harmadik egyszerűbben is kiszámítható, figyelembe véve azt a tulajdonságukat, hogy összegük egy. 8. ábra. A baricentrikus rendszer 25

28 A szokásos, kétparaméteres egyenlethez úgy jutunk, hogy az -t -val, a -t - vel, a -t pedig 1 -vel helyettesítjük:, 1 ahol, 0 és 1 A fentieknek megfelelően a pont helyzetét a háromszög, és jelű csúcspontjaihoz viszonyítva az alábbi képlet adja meg:, A baricentrikus koordináták gyakorlatilag azt fejezik ki, hogy a háromszög csúcspontjai milyen súllyal szerepelnek a pont viszonylatában. A fenti ábra alapján könnyen beláthatjuk azt is, hogy egy pont akkor van a háromszögön belül, ha, 0 és Interpoláció A térbeli interpoláció egy olyan művelet, ami mintavételezett területeken a közvetlenül nem mért vagy megfigyelt pontok tulajdonságának kiszámítására szolgál. Lényegében a diszkrét modelleket folytonossá tevő térbeli operátor. Az interpoláció szerepe a mérnöki rendszerben az, hogy kiterjessze a hiányzó adatokat azokra a területekre, ahol a valós világ megfigyelései nem lehetségesek vagy egyszerűen általunk az adott folyamatban nem elérhetők. Fontos megjegyezni az interpolációval kapcsolatban, hogy minden adatszint, amit ezzel a folyamattal létrehozunk, olyan információt fog tartalmazni, amiről mi azt hisszük, hogy igaz. Ezt nagyon könnyű elfelejteni miután már az interpolációt végrehajtottuk Lineáris interpoláció A háromdimenziós grafikában az elemi felület a háromszög, mert három pont, bárhogy is helyezkedjen el a térben, mindig meghatároz legalább egy síkot. Ez a megállapítás már nem igaz a négyszögekre. Ezért a háromdimenziós térben a DEM modelleket mindig háromszögekkel reprezentáljuk függetlenül attól, hogy szabályos vagy szabálytalan modellel dolgozunk. Ebből következik, hogy egy tetszőleges pont magassága a körülötte elhelyezkedő három szomszédos pont magasságértékéből becsülhető meg. Minél finomabb a DEM modell felbontása, annál pontosabban határozható meg a keresett pont magassága lineáris interpolációval. Itt bármely három sarokpont által meghatározott sík egyenlete a következő: 0 A három adott koordináta értéket behelyettesítve: 26

29 0 0 0 Az egyenleteket megoldva,,, -re 0, és felírható függvényeként. A háromszögön belül, bármely, értéke az: 0 egyenlet megoldása révén nyerhető. Természetesen baricentrikus rendszerben jóval egyszerűbben is számítható egy pont magasságértéke:,, ahol,, a keresett pont baricentrikus koordinátái. A magasságérték pedig a összefüggéssel kapható Bikubikus felületfoltok (patchek) Egy általános térbeli felületet, amely háromszögekből épül fel, nagyon részletesen kell megalkotni ahhoz, hogy az elemi háromszögek észrevétlenül maradjanak. Ez a módszer viszont nagymennyiségű adat kezelését vonja maga után. Cserébe egyszerű lineáris interpolációval is megfelelő pontossággal tudjuk a magasságértékeket becsülni. Egy lehetséges másik út a felületek parametrikus megadása. A térbeli felületeket általában a felhasználóhoz közel álló geometriai jellemzőkkel határozzuk meg. Ilyenek lehetnek a pontok, érintők, érintősíkok, görbék. Felületekkel vagy felületfoltokkal modellezhetünk összetett alakzatokat, valamint az így létrehozott felületekről elmondhatjuk még azt is, hogy lehetnek globálisan és lokálisan változtathatóak. A bikubikus interpoláció tulajdonképpen a harmadfokú interpoláció továbbgondolása. A harmadfokú görbéket általánosan az összefüggéssel 27

30 tudjuk leírni, ahol az interpolációs, vagy kontrollpont, pedig a bázisfüggvény értéke a paraméterérték mellett. Harmadfokú görbéknél a - ben harmadfokú függvény. Ha ki akarjuk terjeszteni kétdimenziósra a paramétertartományt, azt a következő módon tehetjük meg:,, Bonyolultabb felületek szerkesztésekor gyakran adódik az illesztés problémája, ugyanis az egyszerűbb felületrészleteket (foltokat) külön-külön hozzuk létre, majd belőlük állítjuk össze a végleges objektumot. Két szomszédos folt 0-ad rendű folytonosan (C0) illeszkedik, ha a közös határgörbe azonos. Az illesztés elsőrendben folytonos (C1), ha a két folt érintővektorai a határgörbe minden pontjában egyenlőek. Ez azt jelenti, hogy az érintősík folytonos változású lesz a határgörbe mentén. A C2 esetben nem csak az első, hanem a második deriváltak is megegyeznek az illesztési pontban, így az érintő és a görbület is azonos. A G1 folytonosság esetén az érintő vektoroknak ugyanabba az irányba kell mutatniuk, viszont a nagyságuk eltérő lehet Bézier-négyszög folt A Bézier-felület egy olyan felület, melyet térbeli Bézier-görbék alkotnak. Egy harmadfokú Bézier-görbét 4 kontrollpont határoz meg. Nyilvánvaló, hogy akkor tudunk egy térbeli felületet felépíteni, ha hosszában és keresztben is ki tudjuk számolni a térbeli görbéinket. Ebből következik, hogy a legegyszerűbb Bézierfelületet 4 4 azaz 16 kontrollpont határozza meg. A karakterisztikus poliédernek csak a csúcsai tartoznak a felülethez, a többi csak a görbék görbülését befolyásolja. A felületek Bézier-approximációja során a Brenstein-polinomokat használjuk súlyfüggvényeként:, ahol és rendre az. és. fokú Bézier-görbék,. és. alapfüggvényei az és paraméterértékek mellett és, 0,1 0,1. Részletesen 1 A kontrollpontok mátrixba rendezésével a harmadfokú Bézier-felület mátrixos alakja a következő: 28

31 ,,,,,,,,,,,,,,,,, ahol A felület parciális deriváltjai egy adott pontban:,,,,,,,,,,,,,,,,, és,,,,,,,,,,,,,,,,, ahol

32 9. ábra. Négy foltból álló felület (normális tuv, parciális derivált tv és tu) A parciális deriváltak ismeretében a felületi normális a már ismert összefüggéssel számítható:,,, Az alapvető összefüggések után már csak a hiányzó kontrollpontok felírása maradt hátra. Tudjuk, hogy egy felületfolt leírásához 16 vektor szükséges. Az RSG felületmodell esetén négy magasságérték áll rendelkezésünkre. Ezek a pontok a felületfolt négy sarokpontját fogják alkotni. A Bézier-felület a négy sarokponton egyértelműen áthalad, ezért használható interpolációs feladatra. A maradék 12 vektort a felület egyéb jellemzőiből kell előállítanunk. A vektorok felírásában segítségünkre lehet a fenti ábra. Látható, hogy ha ismert a sarokpontokban a normálvektor, akkor a folt oldalain elhelyezkedő vektorok a parciális deriváltak segítségével számíthatóak. A vektorokat az oldalhosszak egyharmadában célszerű felvenni. A parciális deriváltak és az oldalhosszak harmadának szorzata mind egy-egy vektort alkot, amely kijelöli a kontrolpontok térbeli helyzetét. Az tengely mentén lévők esetén csak a, az tengely mentén pedig csak a magasságváltozásból becsüljük, míg a középső négy kontrolpont esetén a és magasságváltozás összegeként írhatóak fel. A 16 kontrolpont meghatározása után a már ismertetett összefüggéssel számítható bármely és paraméterre a keresett pont magasságértéke és a pontban értelmezett normálvektor. 30

33 Bézier-háromszög folt A Bézier-négyszög folt csak RSG felületmodell esetén használható, TIN modellnél már nem. A probléma itt is az, hogy a háromszögeken belüli lineáris interpoláció itt is egy síklapokból álló, törésekkel rendelkező felületet eredményez. Ezért egy megfelelően sima felület előállításához további jellemzők bevonása szükséges. Ezért a sík háromszöglapok helyett magasabb rendű felületeket kell használnunk. 10. ábra. Bemenő adatok, csúcspont és normálvektor (a), kontrolháló (b) Az elemi felületek meghatározására a következő peremfeltételekkel adható meg [Czimber, 2002]: Az elemei felületeket a háromszögek területén belül kell felállítani. A felület magassága a csúcspontokban egyezzen meg a pont magasságával. A pontok a keresett felület kontrolpontjai legyenek. A pontokban a felület első parciális deriváltjai előre meghatározott értékek legyenek. Az első parciális deriváltak a ponthoz kapcsolódó háromszögek normálvektora alapján számítható. A kapcsolódó háromszögek kijelölését a háromszög topológia biztosítja. Az elemi felületek a háromszögek élein kapcsolódnak. A kapcsolódásnak nullad-, elsőrendű vagy magasabb rendűnek kell lennie. A nulladrendű kapcsolódás azt jelenti, hogy a felületek magassága az éleken megegyezik. Az elsőrendű kapcsolatnál az élek mentén az első parciális deriváltak is megegyeznek, amely törésmentes kapcsolatot eredményez a felületek között. A másodrendű kapcsolatnál a második parciális deriváltak is megegyeznek, amely törésmentes és sima érintkezést jelent. Ezt az utóbbi feltételt, amely az éleken azonos görbületet eredményez, nagyon nehéz biztosítani. A parciális deriváltak ismeretében az elemi felületek felírhatók. A szakirodalom rendszerint itt is a Bézier-háromszöget javasolja elemi felületnek. A Bézierfelület közel szabályos háromszögek esetén elsőrendű kapcsolatot biztosít. A Bézier-háromszög egy háromparaméteres, harmadfokú polinom, mely a Breinstein-polinomból és a Bézier-görbéből vezethető le. A Breinsteinpolinomokhoz hasonlóan kell képezni a harmadfokú Bézier-háromszöget is :, 1,,, 0 31

34 3!,!!! ahol,, a háromszögön belüli pont baricentrikus koordinátái i, j, k indexek, értékük a következő lehet: 0, 1, 2, 3,, a Bézier-háromszöget kifeszítő kontrolpontok A pont a háromszöget három segédháromszögre bontja. A baricentrikus koordináták a segédháromszögek és a háromszög területének hányadosából számíthatók. 11. ábra. A kontrol pontok felállítása (a) és a teljes kontrolháló (b) Az élek harmadában felállított kontrolpontok magasságai a háromszög csúcspontjainak magasságából és a csúcspontokban meghatározott normálvektorokból állíthatók elő a fenti ábrának megfelelően [Vlachos et al., 2001]: 2 /3 2 /3 2 /3 2 /3 2 /3 2 /3 12. ábra. Kész Bézier-háromszög 32

35 A középső kontrolpont magassága a szélső kontrolpontokból számítható egyszerű átlaggal vagy egy másodfokú görbével: /6 /3 /2 Törésvonalak esetén a kontrolpontok számítása eltér. Ilyenkor a törésvonalra eső oldal mentén a parciális deriváltakat (normálvektorokat) a sík háromszögből kell előállítani. A Bézier-háromszög felállítása után már bármely pont magasságát számítani tudjuk a háromszögön belül. A másik fontos kérdés a meghatározott magasságértékekben a normálvektorok számítása. A legegyszerűbb módszere itt is a lineáris interpoláció (linear normal variation):,, 1 A lineáris interpoláció bár gyors, de inflexióval rendelkező görbék mentén nem tud jó eredményt adni. Ezt jól szemlélteti a lenti ábra. 13. ábra. Lineáris interpoláció (a), másodfokú normálvektor interpoláció (b) A lineáris interpoláció helyett ezért célszerű a másodfokú vagyis quadratic normal variation módszerét alkalmazni [Vlachos et al., 2001]: 1 2,,, 33

36 4. DEM modellek és algoritmusok 4.1 A geometria és a topológia szétválasztása A DEM modellek alkalmazása során a számítógépbe bevitt információt a program a memóriában adatszerkezetben, illetve a merevlemezen fájlokban tárolja. Az adatszerkezetek és a fájlok többféleképpen is kialakíthatóak. A modellezési folyamathoz használt optimális adatstruktúra nem feltétlenül hatékony a képszintézishez és ez fordítva is igaz. Ezért a virtuális világban elhelyezett modellek tárolásához célszerű a virtuális világ hierarchikus szerkezetéből kiindulni. A virtuális világ objektumokat tartalmaz, az objektumok pedig primitív objektumokból épülnek fel. Geometriai primitív például a gömb és a gúla vagy a téglatest és a poliéder, amely lapokból (face), azaz poligonokból áll. A poligont élek építik fel (edge), az éleket pedig térbeli csomópontok (node) kapcsolják össze. A hierarchikus felépítésnek megfelelő objektummodell a lenti ábrán látható. Világ Objektum Transzformáció Primitív Attribútomok Pont (x,y,z) 14. ábra. A világleírás osztály diagramja Ilyenkor minden poligont csúcsainak koordinátáival adunk meg. Az egymásután következő csúcsok határozzák meg az éleket. Redundáns adattárolás, mivel egy csúcs annyiszor szerepel, ahány poligonhoz tartozik. Ha egy poligonnak csúcsa van, akkor az alábbi módon tároljuk a csúcsokat:,,,,,,,,, A fenti, tisztán hierarchikus modellel szemben több kifogás is emelhető. A hierarchikus modell a különböző primitívek közös pontjait többszörösen tárolja, azaz nem használja ki, hogy a különböző primitívek általában illeszkednek egymáshoz, így a pontokat közösen birtokolják. Ez egyrészt helypazarló, másrészt a transzformációkat feleslegesen sokszor kell végrehajtani. Ráadásul, ha az interaktív modellezés során a felhasználó módosít egy pontot, akkor külön figyelmet kíván valamennyi másolat korrekt megváltoztatása. Ezt a problémát megoldhatjuk, ha a pontokat eltávolítjuk az objektumokból és egy közös tömbben fogjuk össze. A test leírásában csupán mutatókat vagy indexeket helyezünk el a pontok azonosítására. A javított modellünk tehát két részből áll: 1. A pontokat tartalmazó tömb lényegében a geometriát határozza meg. 2. Az adatstruktúra többi része pedig a részleges topológiát írja le, azaz azt, hogy egy objektum mely primitívekből áll és a primitíveknek melyek a definíciós pontjai. 34

37 Amikor a térben tetszőleges helyzetű síkbeli sokszöget ábrázolunk, természetesen tudni szeretnénk azt is, hogy éppen melyik oldalát látjuk. Ehhez azonban meg kell határozni a sokszög irányítását, vagyis el kell dönteni, hogy melyik a sokszög felső, illetve alsó oldala. Ezt könnyen megtehetjük, ha a sokszöghöz hozzárendelünk egy körbejárási irányt, vagyis a sokszög csúcsainak sorrendjét. 15. ábra. A geometriai fogalmak és a körüljárás értelmezése Azt mondjuk, hogy a sokszög felső oldala (vagyis színe ), amelyik mindig a bal kezünk felé esik, ha a sokszög élein a megszabott irányban végigsétálunk. A másik oldal a sokszög alsó oldala (vagy fonákja ). Zárt poliéderek esetén az irányítások összerendelése fordított sorrendben történik, itt ugyanis a felső (szemléletesebb kifejezéssel külső ) oldal meghatározott, és ehhez rendeljük hozzá a megfelelő körbejárási irányt [Füzi, 1995] Poligonokkal határolt felületek A fentiek értelmében, ha az adatstruktúra nem csak a rajzi objektumokat, hanem azok térbeli kapcsolódási struktúráját (azaz a topológiát) is tartalmazza, akkor topológikus adatmodellről beszélünk Csúcslista Két listában tároljuk az adatokat. Az egyik lista a csúcsok listája, melyben megadjuk az összes csúcsot. Ezek az úgynevezett geometriai adatok. A másik listában felsoroljuk a poligonokat, ahol a listaelemek mutatók (vagy esetleg indexek) és a csúcslista megfelelő elemeire mutatnak. Ezek a topológiai adatok. Csúcsok listája Poligonok listája darab poligon estén,,,,,,,,,,,,,,,,,, 35

38 Él lista A csúcslistán kívül a teljes topológia leírásához szükséges definiálni egy éllistát és egy poligon listát is. Az élek listájában két mutató a csúcslista 1-1 elemére mutat, melyek az él két végpontját határozza meg. Másik két mutató pedig a poligonok listájába mutat, arra a legfeljebb két poligonra, melyek az adott élben találkoznak. Szélső él esetén az egyik mutató null értéket is felvehet. A struktúra akkor is hasonló, ha több mint két poligon találkozik egy élben. A poligonok listájában szereplő mutatók az éllistára mutatnak, a körüljárásnak megfelelően felsorolva az adott poligonhoz tartozó éleket. A fenti ábrához tartozó struktúra a következőképpen írható le: Csúcsok listája Élek listája Poligonok listája,,,,,,,,,,,, 0,1,0, 1,2,1, 2,3,1, 3,1,0,1 3,0,0, 0,3,4 1,2,3 Az élek esetén az első két index a csúcslistába, a második kettő pedig a poligonok listájába mutat. Általánosan, ha csúcs, poligon és él van: Csúcsok listája Élek listája Poligonok listája,,,,,,,,,,,, 1,2,,,,, 1,2,, 36

39 16. ábra. Poligonháló explicit reprezentációja Általános esetben bármely poligon éleinek a száma eltérő lehet, ebben az esetben dinamikus adatszerkezetre van szükség. Ha egyező élszámú poligonokról van szó, (pl. háromszögek) akkor az adatszerkezet egyszerűbb is lehet [Schwarcz, 2005]. Az általános topológia tárgyalása után célszerű rátérnünk a legelterjedtebb adatszerkezetek áttekintésére Szárnyas él adatstruktúra A teljes topológiai információ az illeszkedéseket kifejező mutatók beépítésével reprezentálható. Egy ilyen modell a 3D felületi modellek tárolására kifejlesztett szárnyas él adatstruktúra, amelyben minden illeszkedési relációt mutatók fejeznek ki. Az adatszerkezet központi eleme az él (edge), amelyben mutatókkal hivatkozunk a két végpontra (vertex_start, vertex_end), az él jobb illetve bal oldalán lévő lapra (face_left, face_right), valamint ezen a két lapon a következő élre (loop_left, loop_right). Az éleket egy láncolt listában tartjuk nyilván, a next mutató a lista láncolásához kell és semmiféle topológiai jelentése nincsen [Szirmay et al., 2003]. Az élekhez tartozó mutatók egy részét a konstruktorokban töltjük fel. A másik részük pedig akkor kap tényleges jelentést, amikor a SetFace függvénnyel az élhez egy lapot rendelünk hozzá. Az élnek két szárnya van, amelyek közül az orient változóval választhatunk. A változó tartalmát úgy is értelmezhetjük, hogy az éleket irányítottnak tekintjük, és a jobb oldali lapra akkor mutatunk a jobb kezünkkel, ha az él irányába fordulunk, a bal oldali lapra pedig akkor, ha hátat fordítunk az él irányának [Szirmay et al., 2003]. 37

40 17. ábra. Szárnyas él adatstruktúra (él, lap, csúcs) A csúcspontok tartalmazzák a Descartes koordinátákat és hivatkoznak az egyik illeszkedő élre, amelyből mutatókon keresztül már minden topológiai kapcsolat előállítható. Hasonlóképpen a lapok is hivatkoznak egyik élükre, amelyből az összes határgörbe származtatható. Az élhez tartozó lapok és csúcsok az él struktúrából könnyen megkereshetők. A lap éleinek előállításához először arra az élre lépünk, amelyre a lap hivatkozik, majd a lapok következő éleit azonosító mutatatók mentén körbejárjuk a lapot. Az alábbi függvény újabb hívásakor mindig egy következő élt állít elő, és az orient változóban azt is megmondja, hogy a lapunk az él melyik oldalán található. A lap csúcsait a lap éleiből úgy kaphatjuk meg, hogy vesszük az élek kezdőpontját. Az élek kezdőpontját az élek irányítottságának megfelelően jelöljük ki [Szirmay et al., 2003]. A szárnyas él adatstruktúrát általában a topológiai helyességet hangsúlyozó Boundary Representation modellezők (B-rep) használják. Vannak azonban olyan szituációk, mikor nincs szükségünk a teljes topológiai információra. Az ilyen esetekben általában elég egy olyan adatszerkezet, amelyben a poligonokat egy tömbbe szervezünk, és minden poligonhoz a körüljárási iránynak megfelelően egy mutatótömb tartozik. A tömbben tárolt mutatók a csúcspontokra mutatnak Négy-él és háromszög topológia A háromszögháló tárolásához két adatstruktúra terjedt el, mindkettő tárolja a topológiát is, azaz a háromszögoldalak és a háromszögek szomszédsági kapcsolatait (18. ábra). Az adatsturktúrákat Guibas és Stolfi (1985) definiálta. Az első struktúra a négy-él (quad-edge) névre hallgat. A négy-él topológiája bonyolult, viszont a háromszögelés gyors és tömör eljárásokkal valósítható meg. Terepmodellezés során előnyösebb a másik adatstruktúra, a háromszög topológia használata. Itt a térbeli kapcsolatok könnyen átláthatók, a tárolás kevesebb helyet igényel, de az eljárás programozása kicsit bonyolultabb. A háromszög topológia alapján a felületmodell megjelenítése és elemzése könnyebb [Czimber, 2002]. 38

41 18. ábra. A négy-él és a háromszög adatstruktúra A háromszög topológia tárolja a koordinátáival adott pontokat és a háromszögeket. A háromszögek megadása hat mutatóval történik, három mutat a háromszög csúcspontjaira és három a szomszédos háromszögekre. Egy csúcspontból álló ponthalmaz háromszögelése megközelítőleg 2 háromszöget és 3 háromszögoldalt eredményez [Czimber, 2002]. A pont tárolásához bájt, a négy-él és a háromszög tárolásához bájt szükséges. Ezek alapján a tárigény háromszög topológia esetén bájt, míg négy-él struktúra esetén bájt Csomópont-háromszög topológia A DEM modellekkel kapcsolatos műveletek gyorsítása érdekében a háromszög topológia kiterjesztett változatát, a csomópont-háromszög adatstruktúrát célszerű bevezetni. A struktúra annyiban tér el az eredetitől, hogy a csomópontok az őket tartalmazó háromszögekre visszamutatnak. Az így kibővített topológikus kapcsolat könnyen felállítható és segítségével gyorsan számíthatóvá válnak a csomópontokban értelmezett vertex normálisok. Ezen felül még számos területen is megtérül a viszonylag kismértékben megnövekedett (84 bájt) tárigény. 19. ábra. A csomópont-háromszög topológia vázlata 39

42 4.2 Magasságmezők és terepadatok betöltése A es fejezetben már tárgyaltuk az adatbetöltés kérdését. Itt is alapvetően kétféle tárolási módszer létezik attól függően, hogy a terepadatok szabálytalan vagy szabályos elrendezésűek. A szabálytalan vagy szórt pontok legegyszerűbb tárolása tagolt szövegfájlokkal valósítható meg: x y z A tereppontok koordinátájához egyéb leíróadatok is szoktak kapcsolódni, mint pl. a pontszám vagy a pontleírás. Természetesen a fenti forma szabályos, vagyis rácsbázisú adatok tárolására is alkalmas, de ilyenkor célszerű kihasználni a belső rend adta lehetőségeket. A játékfejlesztésben a szabályos hálózaton alapuló terepmodelleket magasságmezőnek is nevezik. Az elnevezés alatt olyan technikát értünk, amely a felületet meghatározó háromszögcsúcspontok (vertexek) koordinátájának értékét egy képállományból tölti be. A kép pixeleit a felület vertexeivel feleltetjük meg, és az egyes vertexek koordinátájának értékét (magasságát) a megfelelő pixel színintenzitása határozza meg innen ered a magasságmező elnevezés [Nyisztor, 2005]. A lenti ábrán szemlélhetjük, hogyan történik az egyes pixelek megfeleltetése egy felület vertexeivel. A technika megvalósítására azok a képek a legalkalmasabbak, amelyeknél árnyaltabb az átmenet a szomszédos pixelek színértéke között. A hirtelen átmenet durva ugrásokat okoz a szomszédos pixelek magassága között, amely töredezett tüskés felületeket eredményez. Sokszínű képek helyett ezért inkább a szürkeárnyalatos formátumok alkalmasak erre a célra. 20. ábra. Magasságmező (bal - eredeti kép, jobb - nagyítás) A mérnöki gyakorlatban viszont a magasságmezők önmagukban még nem elegendőek, az egyes pixelek felsorolásán, valamint a sorok és oszlopok számának megadásán túl szükség van a georeferencia adatokra is. Ezek az adatok a ké- 40

43 pet elhelyezik a vizsgált terület vetületi rendszerében és megadják a bal felső pixel középpontjának koordinátáit is. Az egyik legelterjedtebb és legegyszerűbb raszteres formátum, ami a mérnöki igényeket is kielégíti az a ER Mapper Raster (ERS). Az ER Mapper Raster formátumú adathalmaz két fájlból épül fel. Az első fájl a fejléc (header) állomány ami.ers kiterjesztéssel rendelkezik. Az adatállomány fájlneve megegyezik a fejlécállományéval de nem rendelkezik kiterjesztéssel. Az adatállomány magát a magasságértékeket tartalmazza binárisan Band-Interleaved-by-Line (BIL) formátumban. Az egyes pixelek adattípusát pedig a kísérő fejléc állomány határozza meg. A fejléc állomány egy ASCII fájl ami a georeferencia adatokat tartalmazza. A következő táblázat egy fejléc állomány felépítését mutatja be. DatasetHeader Begin DataSetType = ERStorage DataType = Raster ByteOrder = LSBFirst Comments = "File created with Digiterra Map" CoordinateSpace Begin Datum = "SAD69" Projection = "LOCAL" CoordinateType = EN Rotation = 0:0:0.0 CoordinateSpace End RasterInfo Begin CellType = IEEE4ByteReal CellInfo Begin Xdimension = 100 Ydimension = 100 CellInfo End NrOfLines = 100 NrOfCellsPerLine = 180 RegistrationCoord Begin Eastings = Northings = RegistrationCoord End NrOfBands = 1 RasterInfo End DatasetHeader End 1. táblázat. Egy ERS fájl fejlécállománya A fejléc legfontosabb blokkja a RasterInfo, ezen belül a CellType az adatok típusát (pl.: int, float stb.), a CellInfo egy pixel x és y irányú kiterjedését, vagyis a magasságmező felbontását adja meg (pl.: ), a NrOfLines és a NrOfCellsPerLine pedig végül sorok és oszlopok számát adja meg. Az alkalmazott vonatkoztatási rendszerben a rasztert a RegistrationCoord helyezi el, ami tulajdonképpen a raszter bal felső pixel közepének koordinátája. 41

44 4.3 Szabályos (RSG) háromszög hálózat A DEM alapvetően háromdimenziós adattároló és visszakereső eszköz, mely ezen túlmenően képes egyéb információk levezetésére is. Ilyen szempontból legfontosabb modulja az interpoláció, mely végeredményben minden további numerikus és grafikus felhasználás alapja Magasságbecslés Ezt a funkciót látja el az interpolációs modul. A es pontban bemutatott bikubikus felületeket közül a négyzetes Bézier-felületfoltot célszerű alkalmazni RSG modell esetén. Ilyenkor nem okoz problémát az sem, hogy meghatározzuk, hogy a keresett pont melyik másik négy sarokpont által lehatárolt területbe esik bele, hiszen a helyszínrajzi koordináták könnyen sor/oszlop koordinátákká alakíthatóak. Az azonosított négy magasságérték és felületi normális segítségével a felület felírása már lehetséges és az adott x és y koordinátához tartozó magasságérték meghatározható Hossz- és keresztmetszetek előállítása A es pontban már említettük, hogy a profilszámítás tulajdonképpen a magasságbecslés kiterjesztése pontról egy adott görbe struktúrájú mértani helyre. Megvalósítása RSG modell esetén triviális, ezért az érdekesebb kérdésekre TIN modell esetén térünk csak ki Szintvonalas ábrázolás A szintvonalas ábrázolás jellegzetes példái: a térkép, ahol a domborzati viszonyokat az azonos tengerszint feletti magasságú pontokon áthaladó görbe vonallal érzékeltetjük (200 m-es szintvonal, 300 m-es szintvonal, stb.), egy elektronikus részegység, például egy nyomtatott panel melegedési viszonyait bemutató hőtérkép, ahol az azonos hőmérsékletű pontokon áthaladó vonalak (izotermák) rajzolatát használjuk szemléltetésre, stb. Mindezen esetekben lényegében kétváltozós skalárfüggvény ábrázolásáról van szó. Ha a szintvonal rajzolás feladatát matematikailag akarjuk megfogalmazni, a következőket mondhatjuk. Legyen a megjelenítendő függvény, és a vonalat akarjuk felrajzolni, ez az alábbi, implicit egyenlettel adott görbevonal rajzolásával egyenértékű. Amíg az függvény analitikusan adott, elképzelhető, hogy a fenti egyenlet átrendezhető valamely explicit vagy paraméteres, 42

45 ,, formába, és ennek alapján a megfelelő szintvonal felrajzolása könnyen elvégezhető. Ez lehet a helyzet például, ha elméleti számításokkal állapítjuk meg egy elektróda elrendezés elektrosztatikus potenciálterét, és az erőteret az ekvipotenciális vonalak rajzolásával akarjuk szemléltetni [Székely et al., 1992]. Lényegesen gyakrabban találkozunk viszont azzal az esettel, ha a függvényünk csak egy kétdimenziós adathalmaz formájában adott (például mérési eredmények, szimulációs adatok). Tipikus az az eset, amikor négyzetháló sarokpontjain adott a függvény érték, és a köztes területeken interpolációval kell keresnünk a szintvonalakat. A klasszikus nyomkövető algoritmus először megkeresi a függvény valamely pontját, majd onnan elindulva követi a szintvonalat mindaddig, amíg vissza nem jut a kiinduló pontba, vagy ki nem megy a rajzmezőről. Az algoritmussal kapcsolatos gondokat leginkább az okozza, hogy a szintvonalak sokszor nem egybefüggőek: több záródó görbére vagy a rajz határain túlnyúló több vonalra szakadnak. Mivel e görbék egyikét sem szabad kifelejtenünk, végig kell kutatni utánuk az egész ábrázolási mezőt. A fenti módszerrel szemben ezért a szintvonalakat sík háromszöglapokból vezetjük le. A síklap és a szintsíkok metszésvonalának iránya könnyen kifejezhető a sík normálvektorából. A szintvonalazást a háromszög legalacsonyabb és legmagasabb pontja közötti oldalon kell elvégezni. A legalacsonyabb pontból kiindulva a szintvonalak egységnyi távolságra indulnak ki és a szomszédos háromszögoldalig tartanak. A módszer TIN felületmodell esetén is alkalmazható Az RSG modell felületi normálisa Az RSG modellek esetében a terep magassági függvénye nem áll folytonos függvényként a rendelkezésünkre. Egyfelől csak diszkrét pontokban ismert (a modell é irányú pixel rasztere), másfelől e pontokban is véges bitszámon ábrázolt, kvantált adat áll csak rendelkezésre. A diszkrét függvénypontok alapján úgy képezhetjük a felületi normálist, hogy differenciálhányados helyett differenciahányadost számolunk. Jelöljük az modell diszkrét magasság adatait -vel. Ekkor:, ahol két raszterpont irányú távolsága. Kérdés, hogy ha fenti képletet használjuk, pontosan melyik pontra vonatkozóan kaptuk meg a differenciálhányadost. Ismeretes a matematikából, hogy a fenti egyenlet sem az, sem az 1, helyen nem pontos, de valahol a kettő között igen (folytonos függvényt feltételezve). Helyesebb tehát a kapott derivált értékét a két pont közötti sza- 43

46 kasz közepéhez rendelni. Ezt nem szívesen tesszük, mert kényelmesebb volna a deriváltat ugyanazon a pixel raszteron ábrázolni, mint az eredeti képet. Tovább bonyolítja a helyzetet, hogy ha a most hasonló módon kiszámoljuk az irányú deriváltat is, az egy újabb pontra fog vonatkozni. Hogy a vázolt problémát elkerüljük, a differenciálhányadosokat nem a szomszédos, hanem a 2 pixel távolságra lévő pontokból számoljuk:,, és A felhasznált pontok szimmetrikusan helyezkednek el az, pont körül a kapott deriváltak tehát jó közelítéssel erre a pontra vonatkoznak. A fenti összefüggések pontossága nagymértékben függ az osztásköz nagyságától, vagyis a terepmodell felbontásától ( és ). Mivel a jellemző felbontás 100 m körül van, érdemes a szomszédos pontokat is bevonni a számítása (három sor, illetve három oszlop), hogy a durva hibákat elkerüljük:,,,,,, 6,,,,,, 6 A parciális deriváltak azt mutatják meg, hogy adott pontban egy egységet illetve irányba haladva hány egység emelkedés illetve süllyedés tapasztalható a felületen. Ha megbecsültük a parciális deriváltakat, a következő lépés a normálvektor felállítása. Az RSG modell tetszőleges középpontjában az RSG terepmodellre merőleges vektor a következő alakban írható fel:,,1 A fenti számítás gyors és megfelelő eredményt ad a további kalkulációkhoz. A lejtés nagysága és iránya az vektorból már könnyen meghatározható Lejtés és lejtésirány Tekintsük a terepmodell magasságát egy kétváltozós skalárfüggvénynek:, ahol é a terepmodell két helykoordinátája, a magasság. E függvény változásának helyfüggésére a gradiens-vektor jellemző: 44

47 amelyek két összetevője a függvény, illetve szerinti deriváltja. Minél nagyobb e gradiens-vektor abszolút értéke, annál gyorsabban változik az illető környezetben az függvény (a szintvonalra merőleges, az emelkedés iránya). A parciális deriváltak számítása után a gradiens-vektor felhasználásával a terep lejtőszöge ( ) a következő képlettel becsülhető [Nagy et al., 2007]: arctan A kitettség-térképet szintén elkészíthetjük a gradiens-vektor segítségével. A kitettséget az az irány határozza meg, amely merőleges a kontúr vonalakra a felszínen, és lényegében ellentétes a lejtés iránnyal [Moore et al., 1993], tulajdonképpen az, vektor polárszöge. A kitettség-számítás egyenlete a következő: atan2 2, ahol Α (azimuth) a lejtés irányszöge fokban, ha 0 = észak, 90 = kelet, 180 = dél és 270 = nyugat [Czimber, 2002]. A képletben szereplő az atan2, függvény számítógépes környezetben implementált függvény, mely a két argumentum hányadosának arcus tangensét számolja ki. Használata azért előnyös, mert a függvény figyel az előjelekre, a nulla értékekre és az, koordináták polárszögét adja eredményül. Az alábbi táblázat az atan2, függvény működését mutatja be. Dx Dy A 0 > < 0 90 > < > 0 0 arctg(d y /D x ) < 0 0 arctg(d y /D x ) táblázat. Az atan2 függvény belső működése 45

48 A fenti két számítás segítségével két tematikus térkép máris levezethető [Katona, 2003]: Lejtőkategória térkép: az lejtőmeredekség értékeket intervallumba sorolással tartománytérképpé alakítjuk (pl. az egyes tartományok: 0 3, 3 6, 6 10, 10 20, 20 35, 35-nél nagyobb fokos lejtés). Lejtő kitettség térkép: az Α lejtésirány értékeket intervallumba sorolással tartománytérképpé alakítjuk (pl. az egyes tartományok: É, ÉK, K, DK, D, DNy, Ny, ÉNy fekvésű lejtők) Megvilágítás A megvilágítás tematika az,, 1 vektor és a fényforrás,, vektorának skaláris szorzatából meghatározható a Lambert-féle sugárzási modell értéke [Czimber, 1997]: ebből a megvilágítás: illetve ,0 A megvilágítás számítása természetesen az OpenGL grafikus könyvtár segítségével is megoldható A semleges vonal és alkalmazási lehetősége A semleges vonal egy meghatározott emelkedővel vagy eséssel rendelkező olyan vonal, mely a terep szintjében halad, vagyis minden pontja a terepen van. A terep alakulása megszabja irányát és alakját. Dombvidéki és hegyvidéki utak és vasutak tervezésénél nagyon előnyösen fel lehet használni a semleges vonalat. Mind a szintvonalas térképen való vonalbefektetésnél, mind pedig a terepen való nyomvonal keresésénél a semleges vonal rendkívül előnyös szolgálatot tesz, mert segítségével a nyomvonal emelkedési viszonyait jól befolyásolhatjuk, illetve előre meghatározhatjuk, és érvényesítjük a kismértékű és kedvező elosztású földmunkára való törekvést is. A vonalas létesítmény tengelye a semleges vonaltól hol felfelé, hol lefelé eltér, és ennek következtében kisebb-nagyobb bevágások és töltések keletkeznek a tengelyben. Az eltérés nagysága és a terep keresztirányú dőlése alapján a vár- 46

49 ható bevágás, illetve töltés mértéke már tervezés közben is meghatározható és szükség szerint módosítható. A semleges vonal alkalmazása tehát hatásosan elősegíti a jó vízszintes és magassági vonalvezetésre és a legkisebb földmunkára való törekvésünket, de jól szolgálja a tájvédelmi szempontokat is. Nem szükséges, hogy a semleges vonal teljes hosszában azonos emelkedőjű ill. esésű legyen, hanem az a hosszabbrövidebb szakaszon a kívánalmak szerint változhat A semleges vonal hagyományos felkeresése Erre a célra 1:10000 vagy 1:25000, illetve 1:50000 méretarányú térképeket használhatunk fel. A vezérlőpontok segítségével hozzávetőlegesen megválasztjuk a vonalas létesítmény vonalvezetését. A vonal kezdő- és végpontjának magasságát, valamint hosszát a térképről levesszük, és ezek segítségével megállapítjuk az emelkedő (vagy esés) közelítő pontosságú nagyságát: ahol: % a vonal emelkedője % 100 a vonal kezdő- és végpontja közötti magasságkülönbség (m) a vonal hossza (m) A semleges vonal nyomozását, felkeresését ennek az % emelkedőnek és szintvonallépcsőnek megfelelő nagyságú, un. osztóközzel végezzük, amit szúrókörzőbe fogunk. A kezdőponttól kiindulva, minden lépésnél egy-egy következő szintvonalra kell rálépni, és a metszést meg kell jelölni. Az osztóköz a két szomszédos szintvonal között lévő, %-kal emelkedő semleges vonal vízszintes vetületbeli hossza A semleges vonal felkeresése DTM segítségével A semleges vonalak hatékony térképi felkeresése akkor valósítható meg, ha az alkalmazott szoftver grafikus felületén, az ábrázolt domborzatmodellen, valós időben történik (pl.: DigiTerra Map). A szintvonalak és a digitális domborzatmodell megjelenítése után a semleges vonal felkeresését végző programrész például a DigiTerra Map szoftverben azzal indul, hogy a már meghatározott kardinális pontok alapján, a terep tanulmányozásával a képernyőn a mutatóeszköz (egér) segítségével szükség szerinti számban meg kell adni azokat a pontokat ( ), amelyek az elképzelt vonal körülbelüli futását mutatják. Az R semleges vonal felkeresése a digitális domborzatmodell alapján a következő algoritmussal történik: 47

50 A semleges vonal bemeneti változói egy, függvény, amely a vizsgált domborzat magasságát adja vissza az, pozícióban és egy pontokat tartalmazó adatsor, ahol 1. A pontok magassági koordinátáját a, függvény szolgáltatja. Az adatsor legtöbbször csak két elemet, egy kezdő- és egy végpontot tartalmaz. Az eljárás első lépésében a pontok közötti szakaszokra kiszámításra kerülnek a lejtviszonyok, a vízszintes távolságok és a magasságkülönbségek. Ezek a keresőalgoritmus paraméterei. A legfontosabb az semleges vonal lejtése, amely a vonal egészén azonos. További paraméter az s szakaszhossz, amely a semleges vonalat felépítő szakaszok hosszúságát határozza meg. Az algoritmus a kezdőpontból indul ki és a, pontok irányában keresi a semleges vonal töréspontjait. A keresés az előző töréspont és az aktuális töréspont által kijelölt irányban történik egy adott keresőszög alatt. A keresőszög növelésével növelhető a keresés rugalmassága. Nagyobb érték esetén az algoritmus számításigényesebb, de képes hegygerinceket, domborzati alakzatokat is megkerülni. A keresőszög és a szakaszhossz egy sugarú körívet határoz meg az aktuális pont körül, amely mentén a következő pontot keresni kell. A köríven nagyságú távolságonként kell a terep magasságát meghatározni a, függvény segítségével. A magassági pontok összekötésével egy térbeli vonalláncot kapunk, amely pontosan a körív fölött húzódik. Az aktuális pont magassága és az lejtés alapján meghatározható a következő pont magassága, amely egy vízszintes síkot jelöl ki. A következő pont vízszintes koordinátáit a vonallánc és a sík döféspontjának koordinátái adják. A pontokat a végpontig kell keresni. Ha a térbeli pont közelébe érünk egy adott toleranciával, akkor az algoritmus befejeződik. Ha a végpont alatt vagyunk, akkor az lejtés értéke nő, ha fölötte, akkor csökken. Az iteratív eljárást addig folytatódik, míg a végpont közelébe nem érünk a kívánt pontossággal. 21. ábra. A DigiTerra Map semleges vonal felkereső eszköze 48

51 4.3.8 Vízgyűjtő és vízválasztó vonalak meghatározása DEM alapján Vizsgálataink alapvetően az un. vízgyűjtő vonalakra korlátozzuk, mert a vízválasztó vonalak a terep egyszerű transzformációjával (tükrözés a vízszintes síkra) vízgyűjtővé alakulnak. Rácsbázisú DEM-ből indulunk ki, és feltételezzük, hogy a rácspontokban a lejtésirány vektorok is ismertek. Feladatunk tehát olyan algoritmus kidolgozása, mely ilyen feltételek mellett a vízgyűjtő vonalakat automatikusan határozza meg. A vízgyűjtő vonalak elnevezés nagyon szemléletesen utal arra, hogy ha huzamosabb ideig esik az eső, akkor a víz szignifikánsan nagyobb tömegben zúdul át ezen a vonalakon, illetve gyűlik össze, mint a terep más területein. Ennek a közvetlen modellezésével működtek az első, egyszerű algoritmusok, mikor is feltételezték, hogy minden rácspontba egy esőcsepp hullik, és a meredekségi viszonyok (lejtésirány vektor) ismeretében követték a csepp útját a megállásig. Közben feljegyezték, hogy az egyes pontok környezetében hány csepp haladt át, és ahol ez kiugróan magas volt, azt a pontot vízgyűjtő pontnak tekintették. Ez az eljárás sajnos nem elég robosztus, túl érzékeny. A vízcsepp általában nagyon hamar elakad a felszín egy lokális minimum pontjában, csak az elméletileg tiszta felületeken működik megbízhatóan [Mark, 1984]. A vízelfolyás továbbfejlesztett modelljét [Kalmár, 1993] munkája alapján tekintjük át: 1. Ismertnek feltételeztük a terep minden rácspontjában a felszín lejtésirány vektorát, vagyis a normálvektort. 2. Minden rácsponthoz hozzárendeljük az őt tartalmazó azon négyzetet, melynek középpontja a rácspont, és ezen négyzetek a felszínt egyszeresen fedik le. 3. A modellezés tetszőleges időtartamon keresztül folytatható, de időegységenként csak egységnyi víz hullik minden négyzetre. 4. Az -dik időegység alatt a rácsponthoz rendelt négyzeten található vízmennyiség: a) a rácspont nyolc szomszédjától az előző időegység alatt átfolyt vízmennyiségből, b) és a fentről leesett egységnyi vízmennyiségből áll. 5. A rácsponthoz rendelt négyzetben összegyűlt (ld. 4. pontot) vízmennyiség az időegység alatt teljes egészében szétfolyik a 8 szomszédos négyzethez a következő szabály szerint. A vízmennyiséget (vízpotenciált) két részre osztjuk a lejtésirány vektor hossza függvényében (minél hosszabb ez a vektor, annál meredekebb a felszín): a) A lejtésirány vektor hosszával arányos vízmennyiség (tehát 0, ha a felszín vízszintes, illetve a teljes vízmennyiség, ha a lejtésirány vektor maximális hosszú) a síkvetület iránya alapján kerül át a szomszédos rácspontokhoz rendelt négyzetekbe: a lejtésirány vektort eltolásvektornak tekintjük, és addig nyújtjuk, amíg hosszab- 49

52 bik komponense meg nem egyezik a négyzet oldalával. A rácsponthoz rendelt négyzetet ezután ezzel a vektorral toljuk el a szomszéd négyzetekbe, és a vízpotenciált az eltolt négyzet és a szomszéd négyzetek közös részével arányosan osztjuk szét. b) Az a) pontban meghatározott vízmennyiség elosztása után viszszamaradt vízpotenciált szimmetrikusan osztjuk szét a 8 szomszéd között, de figyelembe vesszük azt, hogy a sarokszomszédok a lejtésirány vektorok egyenletes eloszlása esetén kisebb valószínűséggel jutnak vízpotenciálhoz az a) pontbeli eloszlás értelmében. Az élszomszédok és a sarokszomszédok részesedésének aránya: 1 1,2735 amiből következik, hogy a maradék vízpotenciált a következőképpen kell a 8 szomszéd között szétosztani % : Vegyük észre, hogy az időegység alatt a vízpotenciál szétosztása formailag megegyezik egy 3 3-as szűrő alkalmazásával a raszteren, de ez a szűrő most nem konstans, hanem értékei a rácspontokhoz rendelt lejtésirány vektoroktól függnek. Mivel a fentebb leírt eljárást alkalmazva időegység alatt minden rácspontba egység víz esik, és modellünkben a víz nem párolog, és nem szívódik fel, hanem csak ide-oda folydogál, ezért átlagértéke is lesz a rácspontokban (a határpontok különleges kezelést igényelnek, hogy ez az elv ne sérüljön). Vonjunk ki ezért a pontok vízpotenciáljából -t, az átlagot, miután az átlagpotenciál 0 lesz, ezért a vízgyűjtő pontoknak a pozitív potenciálú pontok tekinthetők. A 0 potenciál azonban még túl durva korlát, ezért az ennél magasabb, 4 korláttal kell a tényleges vízgyűjtő pontokat kiválasztani (ahol a rácson számolt maximális potenciál), a végzett iterációk (időegységek) számától függetlenül. Érdemes megjegyezni, hogy a most felállított kétfázisú (5. a b.) vízelfolyási modell a) fázisa felel meg a hagyományos modellnek, b) fázisra pedig a víznyelő (lokális minimum) pontok kiküszöbölése végett van szükség. A gyakorlati tapasztalatok szerint a helyi, lokális vízgyűjtő pontokat, vonalakat, már az első iteráció kimutatja, viszont ezek ekkor még nem feltétlen rendeződnek hosszabb vonallá. Ahogy növeljük az iteráció számot, egyre inkább kirajzolódnak a terep globális vonalai, a csak lokális vízgyűjtő vonalak pedig felszívódnak. A tapasztalatok szerint például 10 iteráció már túl sok, a lényeges részletek is eltűnnek, túlságosan generalizált potenciálfelületet kapunk. Ideá- 50

53 lisnak 3 7 iteráció tűnik, bár speciális esetekben (szép, markáns és keskeny vízgyűjtő vonalak esetén) már 1 iteráció is kielégítő eredményt szolgáltat. Algoritmusunk eddig tárgyalt része még csak egy un. vízpotenciál rácsot hozott létre, amelynek megfeleltethető egy fekete-fehér raszterkép, ahol fehér (1) színűek lesznek a vízgyűjtőnek ítélt pontok, és fekete (0) a háttér. A visszamaradt kép mindig raszterként áll csak rendelkezésre, vagyis vektorformátumra hozandó, és a lényegtelen (rövid) oldalágak el is hagyandók. A vízválasztó vonalakat ugyanezen algoritmus szolgáltatja a felszínnek a vízszintes síkra történő tükrözése révén, ami tulajdonképpen ekvivalens a lejtésirány vektorok megfordításával. Mivel a vízgyűjtő és vízválasztó vonalak egyben a felszín struktúravonalai is, ezért meghatározásukkal a felszín struktúravonalai is feltárásra kerülnek. 4.4 Szabálytalan (TIN) háromszög hálózat A digitális magasságmodellek kialakulásakor, az egyszerűbb kezelhetőség kedvéért elsősorban szabályos négyzet raszterben tárolták a magassági információt. Az esetek túlnyomó többségében azonban a mérések által meghatározott magasságok nem estek egybe a rácspontokkal, ezért a rácspontok magasságát interpolációval kellett meghatározni. Közismert, hogy a közvetlen méréshez képest a legjobb interpoláció is információ veszteséggel jár, ezért már viszonylag hamar felmerült a kérdés, nem lehetne-e a modellben magukat a mért magasságú pontokat tárolni? A válasz az volt, hogy ez lehetséges, ha megoldható, hogy az adatpontokra egyértelmű háromszöghálózatot lehessen szerkeszteni. A módszert az 1970-es években fejlesztették ki és azóta a gyakorlatban használt programok javarésze ezen az elven alapulnak. A háromszögfelbontás nem csak a mérési eredmények konzerválása szempontjából előnyös, hanem a különböző elemző funkciók végrehajtását is segíti. A háromszögfelbontás ugyanis a terepfelmérést végző topográfushoz hasonlóan síkháromszög lapokból álló poliéderekkel modellezi a bonyolultabb terepidomokat, s ez lehetővé teszi az esésviszonyok, benapolás, kitettség valósághű elemzését. Az automatizált térképkészítésnél a háromszögoldalakat a hagyományos módszerhez hasonlóan szintvonal interpolálásra lehet felhasználni. A háromszögekre bontás nem gátolja a köbtartalom és területszámításokat sem, bár a különböző metszési feladatok végrehajtása háromszögmodellben sokkal bonyolultabb, mint a négyzet raszterben. Azt sem szabad elfelejtenünk, hogy a TIN modell tárolása lényegesen nagyobb tároló hely igényű, mint a négyzet raszteré. A TIN modellben a támpontokat vonalakkal kötjük össze, hogy egy háromszöghálót alkossanak. A háromszögek kitűzésénél az (x, y, z) pontoknak csak az (x, y) síkbeli vetületeit vizsgáljuk. A cél az, hogy minél kövérebb háromszögeket 51

54 alkossunk (amelynek szögei minél közelebb állnak a 60 fokhoz), ugyanis a háromszög belső pontjai ekkor kerülnek a legközelebb az adott értékű csúcspontokhoz. Azt az eljárást, ami ezt megvalósítja Delaunay-triangularizációnak nevezik, és a továbbiakban is ez az eljárás kerül ismertetésre TIN felületmodell előállítása Az optimális háromszögelés végrehajtására két dimenzióban igen sok algoritmus ismert. A most bemutatásra kerülő eljárás alapjai jórészt [Czimber, 2002] munkája nyomán került kidolgozásra, míg a törés- és határvonalak figyelembevételét [Markó, 2006] dolgozata alapján tekintjük át: A TIN terepmodell generálása a következő lépéseken keresztül valósul meg: 1. A terepmodell-generálásához kijelölt pontok közül kiválasztjuk azokat, amelyek a terepmodell határaként definiált zárt vonalláncon belül helyezkednek el; a felület építésekor csak ezeket vesszük figyelembe. 2. A terepmodellt alkotó pontokat a keleti (Y) koordináta szerint növekvő sorrendbe rendezzük. A pontok 0-tól -ig tartó sorszámot kapnak, ahol a terepmodellt alkotó pontok száma. A 1 sorszámot a végtelenben lévő elméleti pont kapja. 3. A háromszögek számát beállítjuk a pontok kétszeresére. 4. Legyező háromszögeket alakítunk ki: háromszögélt alkot az. és az 1. pont, amelynek bal és jobb oldalához egyaránt hozzárendeljük a végtelenben lévő 1. pontot. Ha értékét 0 és 1 között végigfuttatjuk, akkor 2 db háromszöget kapunk. A 1. sorszámú pontot tartalmazó háromszögeket árnyék háromszögnek hívjuk jelenleg az összes háromszög ilyen. 5. A háromszögháló topológiáját a következő elvek szerint alakítjuk ki: A háromszögeken belül indexeléssel definiáljuk a 3 csúcspontot (vagyis megadjuk, hogy az. háromszög 1., 2. és 3. csúcspontja a terepmodellt alkotó pontok között milyen sorszámmal szerepel). A háromszögek körüljárási iránya az óramutató járásával ellentétes, azaz a háromszög 1. és 2. pontját összekötő oldal irányához képest a 3. pont balra helyezkedik el. Minden háromszög minden éléhez hozzárendeljük az adott éllel szomszédos háromszög sorszámát (vagy a 1-et, ha a felületmodell szélén lévő élről van szó) 6. A háromszögháló összes élére lefuttatjuk a következő vizsgálatot: A vizsgált élhez két szomszédos háromszög tartozik. A két háromszög egy négyszöget alkot, melynek átlója a vizsgált él. A feladat annak eldöntése, hogy az átló a megfelelő két csúcspontot köti össze, vagy az élt át kell billenteni. Ha A csúcspont a végtelenben van, az élt akkor kell átbillenteni, ha a C csúcspont BD éltől jobbra van. 52

55 Ha C csúcspont a végtelenben van, az élt akkor kell átbillenteni, ha az A csúcspont BD éltől balra van. Ha A és C csúcspont egyike sincs a végtelenben, akkor a Delaunay-vizsgálatot végezzük el: ha B az ACD háromszög köré írható körön belül van, akkor a vizsgált élt át kell billenteni. Amennyiben a vizsgált élt át kell billenteni, akkor a négyszög oldalait alkotó élekre is lefuttatjuk az előző vizsgálatot. 22. ábra. Egy poligon Delaunay-felbontása és nem Delaunay-felbontása A lefuttatott vizsgálatok eredményeképpen előáll a terepmodell első verziója, melyben sem a törésvonalak sem a határvonalak nem lettek figyelembe véve. A terepmodell határa ekkor az összes pontot körülhatároló legkisebb konvex burkolósokszög. 7. A törésvonalakat ábrázoló vonalláncokat 2-2 pontot összekötő szakaszokra feldaraboljuk, majd a szakaszokra lefuttatjuk a következő vizsgálatot: Megkeressük azt a háromszöget, amelynek valamelyik csúcspontja a vizsgált szakasz kezdőpontja, és amelynek a kérdéses ponttal szemközti oldalát metszi a törésvonal-szakasz. Ha nem találunk ilyen háromszöget, akkor a vizsgált törésvonal-szakasz háromszög élre esik. A törésvonal-szakasz által elmetszett ált átbillentjük, majd a szomszédos négy élre lefuttatjuk a Delaunay-vizsgálatot azzal a kikötéssel, hogy a törésvonallal egybeeső él nem módosítható. A vizsgálatot mindaddig újrakezdjük, amíg a törésvonal egybe nem esik egy háromszög éllel. 53

56 23. ábra. Törésvonal kialakítása Azok a háromszögek, amelyeket a felületmodell határvonala elmetsz láthatatlan megjelölést kapnak. Mivel a határvonalon kívüli pontokat nem vettük figyelembe a felület generálásánál, ezért nincs olyan háromszög, amely teljes terjedelmével kívül esne a határvonalon. A láthatatlan háromszögek a felületmodellből fizikailag nem törlődnek, de a későbbi vizsgálatokban (pl. terepszint meghatározás, szintvonal generálás) nem kerülnek figyelembevételre A TIN modell felületi normálisa Szabálytalan háromszögháló esetében nem alkalmazható a es pontban ismertetett számítás. Ilyenkor más módszerhez kell folyamodnunk. A feladatat az, hogy a felület egy tetszőleges pontjában meg kell tudnunk határozni a normálvektort. Normálvektort egy adott pontba csak úgy számolhatunk, ha a kérdéses pontot tartalmazó összes háromszög felületi normálisát számítjuk, majd ezek átlagát, mint pszeudo normálist fogadjuk el megoldásként (lenti ábra). 24. ábra. Pszeudo normális számítása TIN modell esetén Az egyszerű átlag helyett célszerű valamilyen szempont szerint súlyozni a normálisokat, hiszen könnyen belátható, hogy a háromszögek nagyságuk és alakjuk alapján eltérő módon befolyásolják a pontban értelmezett normálist. A legegyszerűbb és legelterjedtebb módszer az, hogy a háromszögek területével arányos súlyokat alkalmazunk. A másik pontosabb módszer pedig az, hogy a kérdéses pont és a hozzá csatlakozó háromszög által meghatározott közös szögértékkel arányos súlyokat vezetünk be: 54

57 Látható, hogy TIN modell esetén a topológia kérdése már korán a felszínre kerül, hiszen a szomszédsági viszonyok (csomópont-háromszög) ismerete nélkül rendkívül megnövekedne a felületi normálisok számításának ideje Profilszámítás TIN modellből Már többször említettük, hogy a profilszámítás tulajdonképpen nem más, mint a terepfelszín magasságértékének meghatározása adott helyszínrajzi koordinátával rendelkező pontsorozat segítségével. A pontsorozat elemeinek összekötésével felülnézetben a helyszínrajzi tengelyt, míg magasságilag a hossz- vagy keresztszelvény fogalmához juthatunk el Hossz-szelvény terepvonal előállítása A hossz-szelvény terepvonal előállításához minden meghatározott tengelypontban ki kell számítani a terepfelszín magasságát. TIN típusú digitális terepmodell használata esetén minden pontra a következő számításokat kell elvégezni [Markó, 2006]: 1. Ki kell választani azt a háromszöget, amelyen belül a kereset pont (tengelypont) elhelyezkedik: a. A háromszögháló topológiájából következően a pont azon a háromszögön belül van, amelynek mindhárom oldalától balra helyezkedik el. b. Az első tengelypont esetén a keresés az első számú háromszög oldalainak vizsgálatával kezdődik. c. Ha a tengelypont a háromszög egyik élétől jobbra helyezkedik el, akkor a vizsgálat azzal a háromszöggel folytatódik, amelyik a kérdéses éllel szomszédos. Ha a kérdéses él mellett árnyék háromszög van, a pont kívül esik a felületmodellen. d. A háromszögek vizsgálatát addig folytatjuk, míg meg nem találjuk a tengelypontot tartalmazó háromszöget. e. A további tengelypontok esetében a háromszögkeresést mindig a megelőző tengelypontot tartalmazó háromszöggel kezdjük. 2. A megfelelő térbeli háromszög három csúcspontjára illesztett síkon vagy Bézier-felületen számítandó a tengelypont magassága Keresztszelvény terepvonalak előállítása TIN felületmodell alkalmazása estén tengelypont keresztszelvényterepvonalának meghatározása a lenti ábrának megfelelően történi. 55

58 25. ábra. Keresztszelvény terepvonal előállítása Az ábrázolandó pászta szélességét a felhasználó adja meg. A keresztszelvény terepvonalában töréspontok a tengelyre állított merőleges és a megfelelő terepmodell háromszögek éleinek metszéspontjában, valamint ha a felületmodellen belül helyezkednek el illetve pontokban adódnak [Markó, 2006] Szintvonal generálás TIN modellen belül A lenti ábra egy elkészült TIN modellt mutat be 10 pontra. Mivel a háromszögek metszéspontjánál lévő értékek ismertek, egy egyszerű elsőfokú egyenlet megoldásával kiszámítható egy a TIN határán belüli pozícióra a kereset magasságérték. 26. ábra. A TIN módszerrel készített szintvonalak Ahhoz, hogy egy TIN modellből szintvonalakat tudjunk generálni, először ki kell választania egy alapszintközt. Ebből kiszámítható, hogy milyen szintvonalak esnek a területre. Azután meg kell határozni minden olyan élt, amit szétvág valamelyik szintvonal. Ahhoz, hogy ezt el tudjuk végezni, az algoritmusnak össze kell hasonlítania a csúcspontok magasságértékeit a szintvonalak értékével. Pl. a fenti ábrán, kilencet a tizenkilenc élből elmetsz a 100-as szintvonal. A következő lépésben az algoritmusnak ki kell számolnia a metszéspontok (x, y) koordinátáit. Végül össze kell kötni a metszéspontokat. 56

59 Ahogyan azt az előbbi ábrán látni, az egyik probléma a szintvonalak TIN modellből történő szerkesztésénél az, hogy a szintvonalak szögletesek lesznek, törnek a háromszögek határán. Ahhoz, hogy ezt finomítsuk, néhány TIN modell a felszínt háromszögenként elsőfokú matematikai függvény helyett, olyan magasabb fokú függvényből képezi, amely figyelembe veszi a kapcsolódó háromszögek tulajdonságait is. Ezzel biztosítják, hogy a szintvonal a háromszögek szélén is folyamatosan változik. Ilyen módszer a Bézier-háromszög folt is, amelyet a pontban már bemutattunk TIN előállítása RSG-ből Sokszor felmerül arra az igény, hogy az RSG modellről áttérjünk TIN modellre. Ennek a fő oka az, hogy így jóval több lehetőség nyílik a terep formálására, mint a szabályos modell esetében. A konverzió során a fő feladat az, hogy minél kevesebb háromszöggel minél pontosabban fedjük le a terepet. Feltételezzük, hogy ehhez egy elegendően sűrű (finom felbontású) RSG áll rendelkezésre. A TIN előállítása két lépésből áll: az alappontok kiválasztása háromszögek felállítása (Delaunay-algoritmus). Az alappontok kiválasztására két algoritmust terjedt el [Katona, 2003] Fowler-Little algoritmus Először megjelöljük az alábbi speciális pontokat: 1. csúcspont, mind a 8 szomszédja kisebb 2. gödörpont, mind a 8 szomszédja nagyobb 3. nyeregpont, a kisebb és nagyobb szomszédok legalább kétszer váltanak a körbejárás során, például: vagy ahol + nagyobb, - kisebb szomszédot jelöl. Ezután 2 2-es ablakokban vizsgáljuk a pontokat, egy pont 4 ilyen ablakban szerepel. Most az alábbi speciális pontokat jelöljük meg: 1. gerincpont, egyik ablakban sem legkisebb 2. völgypont, egyik ablakban sem legnagyobb Ezután nyeregpontból indulva szomszédos gerincpontokon keresztül csúcsig, ill. szomszédos völgypontokon keresztül gödörig haladunk. A gerinc- és völgyvonalakat 1 pixel vastagságúra vékonyítjuk, és vektorizáljuk. A kapott csúcs-, gödörés nyeregpontok ill. gerinc- és völgyvonalak töréspontjai lesznek a TIN szögpontjai. Megjegyzendő, hogy a fenti algoritmust még jelentősen finomítani kell gyakorlati alkalmazhatósághoz [Katona, 2003]. 57

60 VIP algoritmus A VIP avagy Very Important Point algoritmus esetében nagyon fontos pont - okat keresünk a felületmodellen. Minden P ponthoz egy F fontossági számértéket számolunk a pont szomszédjaiból. A szomszédokat számokkal jelöljük: P Vezessünk egyenest a pont két szemben lévő szomszédján (például a 4-es és 8- as szomszédon) keresztül, és számoljuk ki ennek a térbeli egyenesnek a távolságát a P ponttól:,,. A négy ilyen távolság átlaga legyen a pont fontossági mértéke: 0,25,,,,,,,, Ezután a pontokat növekvő fontossági sorrendben töröljük az RSG-ből (először a legkevésbé fontosat), amíg a pontok száma adott mértékre csökken, vagy a fontosság adott mértékre nő. Az Arc/Info ezt az algoritmust használja [Katona, 2003]. 58

61 5. Programtervezés A programstabilitás egy igen fontos kérdés, főleg Windows környezetben. Az új fejlesztői környezetek (Visual Basic, JavaScript, Java, C++, C#,.NET) már leveszik a programozó válláról a programok legkritikusabb részét a memóriakezelést, az objektumok létrehozását, bővítését és törlését. A fejlesztői környezetek közül talán a legígéretesebb a Microsoft.NET környezete [Platt, 2001], amely forráskód és platform független megoldást kínál. Egyszerre nyújt önálló-, elosztott- és webes-alkalmazásokra új, egyszerűbb, rugalmasabb megoldást. A környezet egy új operációs rendszerként is felfogható, ami biztonságosan futtatja az Internetről letölthető és komponensekből felépülő programokat. A.NET környezet a Windows 2000 operációs rendszertől már elérhető [Czimber, 2001]. 5.1 A.NET fejlesztőkörnyezet A.NET (olvasata: dot net ) a Microsoft új technológiája, mely lehetővé teszi alkalmazások, programok és szolgáltatások nyelv-, rendszer- és platformfüggetlen felépítését. Nyelvsemlegesség alatt nem csak azt értjük, hogy a kitűzött feladat megoldását bármelyik.net-nyelvvel elérhetjük, hanem azt is, hogy különböző nyelveken kódolt modulokat zökkenőmentesen összekapcsolhatunk egy.net alkalmazáson belül. A.NET rendszersemlegessége biztosítja a.net alkalmazások futását minden olyan rendszer alatt, mely rendelkezik a.net futási környezetével (ez pedig elvileg minden rendszer részére elkészíthető). A platformsemlegesség alatt pedig azt értjük, hogy például egy Web alkalmazás esetében mindegy, hogy egy PC-böngészőben, egy mobil készüléken vagy egy PDA-n hagyjuk futni, az eredmény lényegében ugyanaz. C# alkalmazásokat nem csak Windows környezetben futtathatunk. Már létezik a Windows-tól független.net megvalósítás is: a Mono egy nyílt forráskódú platform, amely rendelkezik C# fordítóval és CLR-rel. Működik Linux, UNIX, Mac OS, és persze Windows alatt is. Tehát mint látjuk, a.net célja részben megegyezik a Java-éval de egy bizonyos szempontból el is tér attól. A Java esetében ugyanis egy adott programozási nyelven készült program fut különböző platformokon; a.net ennél tágabb lehetőséget biztosít: a program megírható bármely, a.net lehetőségeit használó programozási nyelven, sőt ugyanazon program komponensei is megírhatók más-más nyelven, majd az alkalmazás összeépíthető. Az alapmegoldás ezután megint hasonló a Java-éhoz: platformfüggő futtató-rendszerek működtetik a platformfüggetlen alkalmazást. A.NET egy menedzselt (felügyelt) futtatási környezet nyújt számunkra, melyben úgy tűnik leegyszerűsödik a fejlesztés, el fognak tűnni a programozási nyelvek különbözőségei. A középpontban pedig a menedzselt (felügyelt) kód áll, 59

62 melyet a közös futtató környezet CLR (Common Language Runtime) működtet. A program (technikai) elkészítésének kulcsa az adott nyelvhez tartozó fordító, amely a forrásprogramot köztes kódra (MSIL, Microsoft Intermediate Language) fordítja. Ezt az állományt a JIT (Just In Time) platformfüggő fordítók a futtatás során fordítják le az adott operációs rendszernek megfelelő kódra. Ezzel lehetővé válik az operációs rendszertől független fordítás (a CLR minden platformra egységes), és megvalósulhat a különböző programnyelvek közti együttműködés és átjárhatóság. A.NET környezet a CLS (Common Language Specification) által meghatározott típusokkal dolgozik, és szigorú típusellenőrzést végez a CTS (Common Type System) alapján. 27. ábra. A.NET FrameWork összetevői Tehát bármilyen nyelven is írtuk meg programunkat, a köztes kód már azonos. A köztes kódot a CLR futtatja, felügyeli. Ennek keretében: fordítja/futtatja a kódot, gondoskodik az automatikus szemétgyűjtésről, egységes kivételkezelést biztosít, folyamatos biztonsági ellenőrzést végez A Common Language Runtime (CLR) A felügyelt kódot a Common Language Runtime (CLR) környezet futtatja. Minden CLR-rel kompatibilis fejlesztőeszköz a forráskódot a szabványos Intermediate Language (IL) nyelvre fordítja le, így az egyes programozási nyelvek különbözőségei a futás idejére eltűnnek. Az IL kód (köztes kód) futtatásához szükség van a JIT-re (Just In Time Compiler). A JIT a köztes kódból az adott rendszeren futtatható kódot készít (nem interpreter). A különböző platformokra különböző JIT fordítók készíthetők. A CLR összetétele: 1. Com Marshaller A Com Marshaller teszi lehetővé, hogy a korábbi COM komponensek továbbra is használhatók legyenek a.net alkalmazásokban. 60

63 2. Kivételkezelő A programok futásuk alatt sokszor találkoznak váratlan helyzetekkel, illetve hibákkal. Ezeket az eseteket le kell tudni kezelni, valamilyen speciális vagy általános kód futtatásával reagálni kell rájuk. A különböző programozási nyelvek különböző megoldásokat alkalmaznak, a.net környezet viszont egységes megoldást kínál. Az alapmegoldás szerint a kivételeket kivételkezelő programblokkokban kell elkapni; a kivételek felmerülésekor pedig objektumok keletkeznek, melyek a kivétellel kapcsolatos információkat hordozzák ezeket a kivétel-feldolgozó blokkokban használhatjuk fel. A különböző típusú kivételekhez, hibákhoz különböző típusú (osztályú) objektumok tartoznak a kivételosztályok az Exception osztályból leszármazva egész hierarchiát alkotnak. 3. Biztonság-kezelő A kód futását felügyeli, ellenőrzi, hogy egy adott kód milyen jogosultságokkal rendelkezik az adott gépen. Az egyes kódokhoz attribútumok kapcsolódnak, ezekhez biztonsági megszorításokat lehet rendelni: ilyen például az eredet-nyilvántartás (megadható, hogy adott forrásból származó (pl. webről letöltött) programok milyen műveleteket végezhetnek és milyeneket nem a gépen. 4. Típusellenőrző A típusellenőrző futási idejű típusellenőrzést biztosít. A típusellenőrző futás közben, a programban levő metaadatok alapján figyeli az egyes műveletek típushelyességét (minden művelet csak meghatározott, hozzárendelt adattípusokkal végezhető). 5. Szálkezelő Biztosítja a szálkezelést (thread) illetve a szinkronizálást. Támogatja a többszálú futtatást, és felügyeli ennek helyes végrehajtását. 6. Szemétgyűjtő Biztosítja a nem használt objektumok automatikus megszüntetését. 7. Típuskönyvtár A.NET alapú fejlesztést jelenleg mintegy 14000, névterekbe rendezett, előre gyártott osztály támogatja. Ezeket az osztályokat minden.net nyelvben el lehet érni és fel lehet használni. A.NET Framework 3.5 SP1 statisztikája: osztály db, interfész db, enum db, struktúra db A natív és menedzselt kód versenye A.NET rendszer bevezetésének idején ádáz vita folyt arról, hogy vajon a menedzselt vagy a natív kód az, amelyik gyorsabban fut. Voltak, akik az egyikre, míg mások a másikra esküdtek. Sőt, számos mérési eredmény is közszemlére került. Főleg a C/C++ fejlesztők voltak azok, akik jókat nevettek azokon az állításokon, hogy egy menedzselt kód gyorsabb, mint a születésénél fog- 61

64 va natív kód. Ez a vita mára eldőlni látszik, mégpedig a menedzselt, JIT fordító által generált kódok javára. Ez igaz a Java és.net kódra egyaránt. Amikor egy C/C++ fordítóprogram előállít egy natív, futtatható fájlt (pl.: Windows alatt egy EXE-t), akkor különböző feltételezésekkel kell élnie, hogy a generálandó kódot majd milyen működési környezetre optimalizálja. Igyekszik az architektúra szerinti legkisebb közös többszörösnek megfelelő futtatható kódot előállítani. Azt azonban nem tudhatja, hacsak a programozó előre meg nem mondja neki, hogy ahol a kód majd ténylegesen futni fog, hány processzor van, milyen a processzor és/vagy az adott hardver környezete, architektúrája, utasításkészlete, jellemző tulajdonságai, stb. Elképzelhető, hogy a programozó gépének tulajdonságai (ahol a futtatható kód előáll) gyökeresen eltérnek attól, ahol végül is a program majd futni fog. Egy menedzselt kódnál a programozó, pontosabban a fordítóprogram egy gép és architektúra független, köztes kódot állít elő még akkor is, ha a programozó fordítási időben ezt valamelyest befolyásolhatja. Később ezt a már említett.net vagy Java szerinti gépfüggetlen kódot az adott számítógépen, ahol a futatás történik a JIT fordító fogja röptében végrehajtható, natív, gépi kódra fordítani. A lényeg az, hogy miközben a JIT fordító sorra veszi a köztes kód utasításait, azt is megnézi, hogy az a gép, ahol éppen működik, milyen architektúrával, utasításkészlettel rendelkezik, és ennek megfelelően képes az általa generált gépi kódot fordítás vagy jittelés közben optimalizálni. Másképp fogalmazva az adott végrehajtási környezetnek leginkább megfelelő futtatható kódot állít elő, ami gyorsabb lehet, mint egy adott környezetben (pl.: C/C++ fordítóval) már előre legenerált, futtatható kód. Ezen kívül a JIT fordító a natív kód generálása előtt képes kiszűrni és eltávolítani az olyan felesleges kódokat is, mint pl.: if(numberofcpu > 1){...} vagyis a processzorok számának vizsgálatát akkor, ha az adott gépen csak egy processzor van. Ha pedig a gépbe mégis beletesznek egy újabb processzort, akkor a követező futtatásnál a jitter ezt már észleli, és a gépi kód előállításakor ennek megfelelően cselekszik. Persze egy menedzselt kódnak nem csak előnyei, hanem hátrányai is vannak. Az egyik az, hogy a futtatható program első indulása meglehetősen lassú, hiszen a JIT fordítónak a köztes kódból le kell generálnia a natív, futtatható gépi kódot. Természetesen ez a művelet csak egyetlen egyszer hajtódik végre, hiszen amíg a program a maga natív, gépi kódú állapotában a memóriában van, addig azt többször már nem kell natív kóddá alakítania. A másik hátrány, hogy a program futása alatt a JIT által előállított natív kódot tárolni kell a memóriában, emiatt a fizikai memória helyfoglalása lényegesen nagyobb lehet, mint amit egy eleve natív, futtatható program esetén tapasztalunk. Fontos mindig észben tartani viszont, hogy a.net rendszert végtelen nagy memóriatárra tervezték. Ez az elképzelés a mai átlagos RAM méret mellet (4GB) már nem is olyan naiv. 62

65 5.2 A grafikus hardver programozása Az Openg Graphics Library Az OpenGL (Open Graphics Library) egy szabvány specifikáció, ami több nyelven és több platformon elérhető API-t (Application Programming Interface) definiál, két- és háromdimenziós grafikai programok írásához. Ez az interfész több mint 250 különböző függvényhívást tartalmaz, melyek segítségével komplex háromdimenziós jeleneteket rajzolhatunk egyszerű primitívekből [Debreczeni, 2008]. Az OpenGL-t (kezdetben még IrisGL) a Silicon Graphics Inc. (SGI) nevű amerikai cég fejlesztette ki, eredetileg saját grafikus munkaállomásainak programozására. Az SG munkaállomások közismert előnye a gyors és igényes grafika volt, amit hardver oldalról a grafikus kártyába épített egy vagy több geometriai társprocesszor (geometry engine) segítségével értek el. A koncepció rövid idő alatt olyan sikeressé vált, hogy a legnagyobb hardver- és szoftvergyártó cégek többek között a DEC, IBM, Intel, Microsoft és Silicon Graphics összefogásával létrehozták az OpenGL-t amely segítségével az SGI megoldásai más rendszerekre is átültethetővé váltak. Az első OpenGL specifikációt július 1-én mutatták be. Öt nappal később, a legelső Win32 fejlesztői konferencián az SG az OpenGL működését egy Iris Indigo gépen demonstrálta több grafikus alkalmazáson keresztül, mint pl. orvosi képfeldolgozó rendszerek, ill. részletek a Terminator 2 című filmből. Ezek után az SG és a Microsoft együtt fejlesztették tovább az OpenGL-t. Az OpenGL nem más, mint egy szoftver interfész a grafikus hardverhez. Vagyis a hardvernek (grafikus kártyának) tudnia kell beszélnie az OpenGL nyelvét. A gyakorlatban ez annyit jelent, hogy a 3D videokártya meghajtó programja megfelelően fel van telepítve, azaz képes az OpenGL utasításait feldolgozni. Itt jegyezném meg, hogy tulajdonképpen nincs is olyan, hogy OpenGL könyvtár a specifikáció csak és kizárólag az interfészt definiálja, éppen ezért minden hardvergyártónak saját OpenGL megvalósítása van, ezért az elérhető sebesség is nagyban függ az éppen használt videokártyától és annak meghajtójától. Tehát az OpenGL egy szoftverinterfész a grafikus hardverhez. Ez a szoftver interfész pár száz eljárásból és függvényből áll, melyek lehetővé teszik 2 és 3 dimenziós grafikai objektumok létrehozását, és ezeken az objektumokon műveletek elvégzését. Az OpenGL tehát egy eljárás- és függvénygyűjtemény, melyek 2 és 3 dimenziós geometriai objektumok specifikációját tartalmazzák ezenkívül olyan eszközöket is nyújt, melyekkel szabályozni lehet ezen objektumok leképezését a képpufferbe, amelyben az OpenGL az eredményként létrejövő képet tárolja. Ennek megjelenítése már az operációs rendszer, vagy az ahhoz tartozó ablakozó rendszer feladata. 63

66 Az OpenGL nem tartalmaz ablakozó rendszert, és nem támogatja az input eszközök kezelését sem, mivel az OpenGL platformfüggetlenségét az adatbeviteli és megjelenítési rendszertől való függetlenség biztosítja. Ezeket a feladatokat az adott nyelven a programozónak kell megoldani. A Linux-os OpenGL rendszerek grafikus felülete többnyire az X-Window, amely tartalmazza az ablakozást. Windows esetén maga az operációs rendszer szolgáltatja a grafikus felületet. Az OpenGL az ügyfél-kiszolgáló (kliens-szerver) felépítést követi. Ezáltal lehetővé válik, hogy a grafikus alkalmazást futtató, és a végeredményt létrehozó gép egyazon, vagy két különböző gép legyen. A grafikus alkalmazás mint ügyfél parancsokat ad az OpenGL kiszolgálónak, amely létrehozza a képet. Mivel a parancsok átadására szabványos protokollt dolgoztak ki, ezért az ügyfél és a kiszolgáló gépek különböző típusúak is lehetnek OpenGL.NET környezetben Ahhoz, hogy az OpenGL által rögzített interfészt kényelmesen tudjuk kezelni, első lépéséként össze kell kötnünk az OpenGL-t a.net rendszerrel. Vagyis létre kell hoznunk egy olyan osztályt ami kapcsolatot teremt az OpenGL függvényeket tartalmazó opengl32.dll és a.net rendszer között. Ehhez kapcsolódni kell az InteropServices névtérhez. Az opengl32.dll-t be kell importálni a [DllImport("opengl32")] hívással, majd külső (extern) függvényként deklarálni kell a felhasználandó függvényt. Az OpenGL könyvtár függvényeinek használatához tehát három lépést kell megtenni [Illés, 2005]: 1. A DllImport attribútumnak meg kell mondani annak a DLL fájlnak a nevét amit használni kívánunk. 2. A könyvtárban lévő függvényt a fordító számára deklarálni kell, ebben az extern kulcsszó segít. A függvényeket egyúttal statikusnak is kell jelölni. 3. A System.Runtime.InteropServices névteret kell használni. A csomagoló osztály egyik lehetséges felépítése a következő lehet: using System; using System.Runtime.InteropServices; namespace OpenGL { public static class gl { public const uint GL_ACCUM=0x0100; public const uint GL_LOAD=0x0101; [DllImport("opengl32",EntryPoint ="glaccum")] public static extern void glaccum(uint op, float valuex); [DllImport("opengl32",EntryPoint ="glalphafunc")] public static extern void glalphafunc(uint func, float refx); } } 64

67 Már csak egy kérdés maradt hátra, hogy honnan tudjuk meg a függvények betöltéséhez szükséges definíciókat? Az OpenGL-hez sok helyről le lehet tölteni az információkat tartalmazó header fájlt. Így az OpenGL függvények leírását a gl.h fájlban találjuk meg. A feni példának megfelelő leírás a header fájlban: #define GL_ACCUM 0x0100 #define GL_LOAD 0x0101 /**************************************************************/ WINGDIAPI void APIENTRY glaccum(glenum op, GLfloat value); WINGDIAPI void APIENTRY glalphafunc(glenum func, GLclampf ref); Az OpenGL szabványos függvényei mellet célszerű az extension-ök menedzselését is megoldani. Az OpenGL-be implementált és opcionálisan támogatott funkciókat hívják röviden extension-nek. A glext.h fájl tartalmazza az egyes extension-ök betöltéséhez szükséges definíciókat. A fenti gl osztály tulajdonképpen magába burkolja (csomagolja) a natív kódot és kényelmesen elérhetővé teszi, mintha csak menedzselt kódban íródott volna az egész. Ezért az ilyen típusú osztályokat wrapper-nek nevezzük. Azért, hogy a több száz OpenGL függvényt, konstanst és extension-t ne magunknak kelljen beburkolnunk felhasználhatunk már kész OpenGL wrapper-t és framework-öt C# nyelven: 1. Tao Framework v2.1 (May 1, 2008) 2. Open Toolkit v0.9.9 (Sep 6, 2009) 3. CsGL v1.4.1 (Nov 3, 2002) by Lloyd Dupont, Randy R. & Amir Ghezelbash 4. C# OpenGL Interface (CSGL) v12 (Jul 25, 2009) by Colin Fahey or_opengl_en.html 5. WOGL Sharp (beta) v (Jan 27, 2008) by Wiktor K. and Mark T. A felsorolás valószínűleg nem teljes, de az egyszerűbb megvalósításoktól a teljes keretrendszerekig találhatunk megoldásokat az OpenGL használatára C# nyelven. Így mindenki kiválaszthatja a számára megfelelő wrapper-t. A TAO Framework (cross-platform system) egy apró projektből nőtte ki magát az évek alatt. Mára már egy jelentős open-source keretrendszerré vált, amely folyamatosan fejlődik. Elsődleges célja az OpenGL-el kapcsolatos API-k használatának lehetővé tételét.net alatt. A keretrendszer tartalmazza az összes kiterjesztést. Röviden a szolgáltatásairól: OpenGL, OpenAL (audio), SDL, Open Dynamics Engine (ODE), stb. Ezenfelül támogatja a Windows mellett a Linux 65

68 és Mac OS X platformokat is. A keretrendszer jelentős internetes közösséggel rendelkezik. A legjobb választás komolyabb alkalmazások készítéséhez. Az OpenTK (Open Tool Kit) erősen a TAO alapjain nyugszik, a fő különbség a két megoldás között az, hogy míg a TAO amennyire csak lehetséges követi a natív API-t, addig az OpenTK megpróbálja kihasználni a menedzselt környezet előnyeit és így kényelmesebb fejlesztést tesz lehetővé. A következő forráskódrész jól szemlélteti a wrapper-ek közötti különbségeket: // OpenTK.Graphics code: GL.Begin(BeginMode.Points); GL.Color3(Color.Yellow); GL.Vertex3(Vector3.Up); GL.End(); // Tao.OpenGl code: Gl.glBegin(Gl.GL_POINTS); Gl.glColor3ub(255, 255, 0); Gl.glVertex3f(0, 1, 0); Gl.glEnd(); Kisebb programok estében jól jöhet egy jóval egyszerűbb és átláthatóbb interfész az OpenGL függvények eléréséhez. Erre kiválóan alkalmas a C# Wrapper for OpenGL ami Colin Fahey keze munkáját dicséri. A szolgáltatásai terén nem érdemes párhuzamot vonni a nagy wrapper-ekkel, mivel a Tao és az OpenTK messze kimagaslik minden területen. A fő előnye mégis az egyszerűsége és nagyszerűsége. 5.3 Az interaktív kommunikáció A számítógép és a felhasználó közötti interaktív kapcsolatot úgy fogalmazhatnánk meg, hogy a gép a felhasználót állandóan tájékoztatja a folyamatban lévő műveletek állapotáról, eredményeiről és a beavatkozás lehetőségeiről. Lehetővé teszi a beavatkozást a folyamatba, azaz parancsokat fogad el és teljesít. A mérnöki programok területén a legfontosabb célkitűzések közé tartozik az interaktív szerkesztés és megjelenítés. Az előbbi azt jelenti, hogy a grafikai objektumok (görbék, felületek, testek) alakját, színét, méreteit a felhasználó változtatni tudja, anélkül, hogy a forráskódot módosítani kellene. A szerkesztés eredményének interaktív megjelenítése lehetővé teszi a kapott objektumok különböző irányból való megfigyelését illetve a virtuális világban való mozgását [Füzi, 1997]. Az interaktív rendszerek modellezésének, tervezésének és implementációjának alapelveit a gumivonal technika megismerésével érthetjük meg legjobban. 66

69 5.3.1 A gumivonal technika A felhasználó a gumivonal módszerrel egy szakaszt úgy definiálhat, hogy a szakasz egyik végpontján lenyomja az egér gombját, majd lenyomott gombbal elkezdi mozgatni az egeret. A kijelölt kezdőpont és az aktuális pozíció közé a program egy ideiglenes szakaszt húz, ami követi az egér mozgását. A szakasz a gumiformából akkor merevedik meg, ha elengedjük az egér mozgását. Ebben a pillanatban a program a végeleges színnel felrajzolja a szakaszt a képernyőre, majd felkészül a következő szakasz fogadására. Egy program tervezése során a programunk adatait, funkcionalitását és dinamikáját kell kialakítanunk. A funkcionalitáson azon feldolgozási lépéseket (úgynevezett transzformációkat) értjük, amelyek a bemeneti adatokból előállítják a kimeneti adatokat. A dinamika a feldolgozási lépések időbeliségét határozza meg. Interaktív rendszerekben különösen nagy jelentősége van a rendszer dinamikájának, hiszen a felhasználók minden pillanatban nagyon sokféle igényt támaszthatnak a rendszerrel szemben, ezért a feldolgozási lépéseket nagyon sok különféle sorrendben kell végrehajtani. A grafikus rendszerekben az adat-, a funkcionális- és a dinamikus-modell hármasát még a program megjelenési modellje egészíti ki, amely rendelkezik arról, hogy a program milyen látványt produkáljon a felhasználó számára a képernyőn [Szirmay, 2001]. 28. ábra. A gumivonal technikával létrehozható objektumok (vonal, téglalap, kör, poligon) Ugyanis a gumivonal technika nem csak vonalak létrehozására, hanem bármilyen más objektum létrehozására is alkalmas. A technika mindig ugyan az, csak megjelenítés változik az objektumnak megfelelően, lásd a fenti ábrát. Az interaktív rendszerek specifikálása általában a probléma szereplőinek azonosításával, azaz az adatmodell kialakításával kezdődik. A megoldandó feladatunkban ilyen szereplők a felhasználó (user) és a rajzolás alatt álló szakasz (line). Az eseményvezérelt rendszereket a felhasználói igények működtetik, lényegében mindent a felhasználói beavatkozások, események indítanak el. Ezért a következő lépés a felhasználó és a program közötti lehetséges párbeszéd típusok megfogalmazása. Ez a párbeszéd olyan, mintha a felhasználó a fejében futtatná le a programot, amely során a programból rutinokat hívogat. A példában három dialógus szerepel, nevezetesen egy szakasz felvétele, a rajzolási 67

70 szín beállítása, és a képernyő törlése. Egy szakasz felvétele során a felhasználói események sorrendje és a program reakciói az egyes eseményekre a következőek: 1. Kezdőpont kijelölés 2. Gumivonal mozgatás: gumivonal felrajzolás 3. Gumivonal mozgatás: gumivonal áthelyezés Gumivonal mozgatás: gumivonal áthelyezés 6. Végpont kijelölés: végleges felrajzolás a rajzolási színnel Ebben a forgatókönyvben az egyes bejegyzésekben a felhasználói eseményeket, a program reakcióit kettősponttal választottuk el. A szín beállítása és a képernyőtörlés triviális dinamikával rendelkezik, hiszen a felhasználó kiadja az ilyen értelmű parancsot; a program pedig tudomásul veszi azt. Mivel a párbeszédek a felhasználói felület szintjén definiálják a rendszert, a párbeszédeket ki kell terjeszteni a rendszer belső objektumaira is, azaz meg kell mondani, hogy egy a felhasználói felületen megjelent igény kielégítésében a program objektumai miként vesznek részt [Szirmay, 2001]. Üzenet Kezdőpont Gumivonal Végpont Állapot kijelölése mozgatása kijelölése Nyugalmi SetStart kezdő Kezdő Gumi SetEnd DrawRubber gumi DeleteRubber SetEnd DrawRubber gumi 3. táblázat. A gumivonal állapottáblája nyugalmi DeleteRubber SetEnd Draw nyugalmi Az objektumok közötti párbeszédek feltérképezése után az egyes objektumok belsejének modellezése következik. Egy objektum az őt ért üzenet hatására más objektumoknak üzenhet. Előfordulhat, hogy a küldött üzenet nem csak az utolsó kapott üzenet függvénye, hanem a korábbi üzenetek is befolyásolják a viselkedését. Az objektum tehát emlékeket hordozhat a korábbi üzenetekről. Az em- 68

71 lékeket az objektum állapotában tároljuk. Az állapotváltozásokat és az állapotokhoz kapcsolódó tevékenységeket pedig az objektum állapottáblájában foglaljuk össze. Az állapottábla oszlopai az üzeneteket, a sorai pedig a lehetséges állapotokat jelképezik, az egyes táblázatelemekbe pedig az adott állapotban elvégezendő tevékenységet és a következő állapotot írjuk be [Szirmay, 2001]. A szakasz rajzolása során három állapotot különböztetünk meg: nyugalmi (idle) állapotot, amikor nem rajzolunk, a kezdőpont kijelölését szimbolizáló kezdő (start) állapotot, és a vonalat gumiként húzogató gumi (rubber) állapotot. Az állapotok tevékenységének leírása során a SetStart és SetEnd a szakasz kezdő és végpontjának beállítását, a DrawRubber függvény a szakasz XOR módban történő felrajzolását, a DeleteRubber függvény egy másodszori XOR típusú felrajzolással a szakasz letörlését, a Draw pedig a Set típusú felrajzolását jelenti. Az állapottáblák felvétele után a rendszer specifikálása befejeződött, a következő fázis a rendszer tervezése. A tervezés során figyelembe kell venni a konkrét implementációs környezet lehetőségeit, és az absztrakt eseményeket és funkciókat a rendelkezésre álló elemekre kell leképezni Rajzolás az OpenGL-ben Az interaktív kommunikáció megvalósításához meg kell ismerkednünk röviden az OpenGL rögzített csővezetékével (lásd melléklet). Az OpenGL egy állapotgép. A program a függvényeket meghívja, s így állítja be az OpenGL állapotait, amelyek a rögzített leképezést befolyásolják. Ilyenek a színbeállítás, a normálvektor beállítás, az anyagbeállítás, a mátrixműveletek, a textúra-koordináták és a fények állítása [Debreczeni, 2008]. Csúcsadatok Raszterizáció Csúcsműveletek Töredékmüveletek Framebuffer 29. ábra. OpenGL rögzített csővezeték Csúcsadatok: ezeket az adatokat adjuk meg, mikor meghívunk egy glvertex vagy gldrawarrays függvényt. Csúcsműveletek: az OpenGL a programtól kapott csúcsok mindegyikén elvégzi az alábbi műveleteket: Transzformáció: az OpenGL a csúcsokat az objektumkoordináta-térből ablakkordináta-térbe transzformálja. Megvilágítás: amennyiben az alkalmazás bekapcsolta a megvilágítást, kiszámolásra kerülnek az egyes csúcsok megvilágítási értékei. 69

72 Levágás: ha egy primitív egyáltalán nem látható, mert kívül esik a nézet terén, minden csúcsa elvetésre kerül. Ha csak részben látható, csonkolással csak a látható része marad meg. A raszterizáció során a geometriai adatokból töredékek (fragments) jönnek létre. A töredékek olyan helyzeti, szín-, mélység- és mintázatkoordináta adatokból álló egységek, amelyek még feldolgozásra kerülnek a képpufferbe írás előtt. A töredékek tehát különböznek a pixelektől. A pixelek azok a helyek a képpufferben, ahová a töredékek kerülnek. Általában egy töredék egy pixelhez rendelődik, de ettől eltérhetnek a multisampling (többszörös mintavételezéses) élsimítást támogató megvalósítások, ahol egy fragment kisebb, mint egy pixel. Töredékműveletek: a töredékek a képpufferbe kerülés előtt még hosszas feldolgozás alá kerülnek. Ezalatt eldől, hogy ténylegesen bekerülnek-e a képpufferbe, illetve hogy milyen értékekkel kerülnek be [Debreczeni, 2008]. Az OpenGL-ben a geometriai alapelemeket a glbegin() és glend() parancsok között felsorolt csúcspontokkal hozhatunk létre. A glbegin() paraméterével azt adjuk meg, hogy a felsorolt csúcspontokat milyen geometriai alapelemként kell értelmezni. A geometriai alapelemek hivatkozási paramétereit szemlélteti a lenti ábra. 30. ábra. Az OpenGL geometriai képelemei Az OpenGL-ben természetesen a glbegin() és glend() parancsokon kívül léteznek más rajzolási megoldások is, mint pl. a csúcstömbök vagy vertex array. Az OpenGL egyik optimalizációra szánt eszköze ez és előnyét főleg dinamikus tárgyak esetében tapasztalhatjuk meg. A lényege, hogy a fejlesztőnek a tárgy vertexeit egy tömben kell eltárolnia, majd ezen tömb mutatóit kell átadnia az OpenGL környezetnek. Meg kell adni még egy másik tömböt is, amely a háromszögelés folyamatát írja le a vertexek indexeinek sorozatával. Ez alapján a meg- 70

73 jelenítéskor az OpenGL bejárja a tömböt és megjeleníti a háromszögeket. A tömb tartalma dinamikusan változtatható, ezért jó ez a technika például vízfelszín modellezéséhez. Ugyanilyen tömbben tárolódnak el a vertexek normái és textura koordinátái is. Statikus testek megjelenítésére az OpenGL az úgynevezett display listek használatát kínálja. Ezek a listák egyedei azonosítóval rendelkeznek és létrehozásukkor a megadott OpenGL parancsok belefordítódnak a lista objektumba. Ezt a fordítást a grafikus kártya végzi és az eredményt a saját formátumában tárolja. A befordított műveletek sebessége így a lehető legjobb lesz. Megjelenítéskor, csak meg kell hívni a listát. Mivel a terep felszíne mindig statikus ezért megjelentésük során a display listek használata kézenfekvő. A legjobb teljesítményt is a csúcstömbök és a display listák együttes alkalmazásával érhetjük el. 31. ábra. Nagyméretű Rsg DEM valósidejű megjelenítése OpenGL segítségével Manapság egyre nagyobb teret nyerő eszközrendszer, a shaderek segítségével még a dinamikus geometriájú tárgyak is display listbe foglalhatóak. Mivel a vertex-shader a display list feldolgozása után fut le, képes a display listbe foglalt vertexek helyzetét és színét manipulálni így kifejezetten előnyös használatuk akkor is, ha csak eltérő tematika szerint szeretnénk színezni a display listbe foglalt DEM modell vertexeit. Az OpenGL a rajzolás hatékony támogatása mellet számos funkcióval támogatja még az interaktív kommunikáció megvalósítását, ezek közül elég csak megemlíteni a térbeli kijelölést, melyről bővebben a Paul, 2007 irodalomban olvashatunk. 71

74 5.4 Osztály hierarchia A következő részben a dolgozat írása közben elkészített demonstrációs program legfontosabb osztályai és eljárásai kerülnek bemutatásra abból a célból, hogy a már ismertetett DEM algoritmusok megvalósítását megkönnyítsék A DrawingArea UserControl A program központi eleme a DrawingArea kontrol, ami tulajdonképpen egy ablak az OpenGL belsejéhez, valamint a megjelenítéssel és az interaktív kommunikációval kapcsolatos eljárásokat foglalja magába. Az osztály felépítését a lenti ábra szemlélteti. 32. ábra. A DrawingArea osztály felépítése Az osztály tartalmazza az OpenTK csomag GLControl egy példányát glcontrol néven, tulajdonképpen ez az a felület amire a rajzolás történik. Mivel a kontrol a zoom, pan és rotate funkciókat megvalósítja ezért a rajzolás és transzformációs műveletek egér eseményekhez kötődnek. Azért, hogy ne minden egérmozdulat után kelljen újrarajzolni az OpenGL felületet, bevezetésre 72

75 került egy Timer ami minden 15 msec után engedélyezi csak az egéreseményekhez kötődő metódusok lefutását. A Reshape() metódus minden rajzolás vagy ablak átméretezés során meghívódik. A metódusban végrehajtott OpenGL parancsok gondoskodnak a helyes oldalarányokról és a vetítési beállításokról. private void Reshape() { if (glcontrol.clientsize.height == 0) { glcontrol.clientsize = new Size(glControl.ClientSize.Width, 1); } float wc = (glcontrol.width - 1.0f) / zoom; float hc = (glcontrol.height - 1.0f) / zoom; float pc = 0.5f / zoom; GL.Viewport(0, 0, glcontrol.width, glcontrol.height); GL.MatrixMode(MatrixMode.Projection); GL.LoadIdentity(); GL.Ortho(screenX - pc, screenx + wc + pc, screeny - pc, screeny + hc + pc, znear, zfar); GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); } A GL.Viewport parancs a nézetablakot frissíti a teljes ablakra rajzoláshoz. A GL.MatrixMode(Projection) és a GL.LoadIdentity parancsok a vetületi mátrix frissítését készítik elő. Az elsővel megadjuk, hogy a vetítési mátrixot akarjuk módosítani (azt tesszük kurrensé), a másodikkal pedig betöltjük az egységmátrixot. A rendszer ugyanis az újonnan létrehozott vetítési mátrixokkal beszorozza a kurrens mátrixot. Mivel mérnöki programot szeretnék készíteni ezért nem a centrális, hanem a merőleges vetítést alkalmaztuk a GL.Ortho paranccsal. A GL.MatrixMode(Modelview) utasítással a modell-nézet módba kapcsolás történik meg a megjelenítési eljárás miatt. A megjelenítési eljárást a Render() metódus valósítja meg. private void Render() { GL.ClearColor(Color.SteelBlue); GL.Clear(ClearBufferMask.ColorBufferBit ClearBufferMask.DepthBufferBit); GL.Rotate(rotx, 1f, 0f, 0f); GL.Rotate(roty, 0f, 0f, 1f); foreach (IDisplayList Item in DisplayLists) { Item.Call(); } } glcontrol.context.swapbuffers(); 73

76 A metódus elején a kontrol háttérszínét állítjuk be, ezzel a színnel fog minden rajzolás előtt törlődni. A pufferek törlése nagyon időigényes feladat, egyszerűbb rajzok esetén a törlés hosszabb ideig tarthat, mint maga a rajzolás. Ezért a legtöbb grafikus hardver egyidejűleg több puffert is tud törölni, ami jelentős megtakarítást jelent [Juhász, 2003]. Ezért mi is a GL.Clear paranccsal a szín és a mélység puffert egyszerre töröljük. A törlés után a forgatás transzformáció hajtódik végre, amit a tényleges rajzolás követ, azaz a DisplayLists listában tárolt elemek meghívódnak. A listában tárolt elemek mind megvalósítják az IDisplayList interfészt, így tulajdonképpen display list-ekben tárolt OpenGL parancsok hajtódnak végre. A Reshape() és a Render() metódusokat a Redisplay() metódus fogja össze és egymás után hívja meg őket. A glcontrol MouseMove, MouseDown és MouseWheel eseményekhez kötő metódusai az interaktív kommunikációt valósítják meg, valamint a pan, zoom és rotate funkciók paramétereit frissítik. Az OpenGL-ben lehetőség nyílik arra, hogy egy képernyő koordinátát vagy egérkoordinátát átszámoljunk modellkoordinátákra. Ezt a fontos funkciót a GetModellCoords metódus valósítja meg: public void GetModellCoords(MouseEventArgs e) { float[] pixel = new float[1]; //Mátrixok lekérdezése GetOpenGLMatrices(); GL.ReadPixels(e.X, viewportmatrix[3] - e.y, 1, 1, PixelFormat.DepthComponent, PixelType.Float, pixel); Vector3 win = new Vector3(e.X, viewportmatrix[3] - e.y, pixel[0]); } Glu.UnProject(win, modelmatrix, projematrix, viewportmatrix, out worldposition); A metódus először lekérdezi a szükséges mátrixokat: private void GetOpenGLMatrices() { GL.GetDouble(GetPName.ProjectionMatrix, projematrix); GL.GetDouble(GetPName.ModelviewMatrix, modelmatrix); GL.GetInteger(GetPName.Viewport, viewportmatrix); } A GLU UnProject függvény az ablakkoordinátát reprezentáló win vektor és a projection, model és viewport mátrixok segítségével frissíti a worldposition privát mezőt. Ez a vektor természetesen a magasságértéket is tartalmazza, így bármilyen DEM modell tetszőleges pontjáról leolvasható a magasságérték az OpenGL segítségével is. Az AddObject() metódussal adhatunk objektumot a megjelenítési listához, a DeleteObject()-el pedig távolíthatunk el. 74

77 5.4.2 Matematikai osztályok A Vector3d osztály A Vector3d osztály megvalósítja a 3.1-es részben ismertetett vektorokkal kapcsolatos műveleteket és számításokat. Minden olyan programnak, amely vektorgrafikus alapokon nyugszik, szüksége van egy vektor osztályra, hiszen a síkbeli vagy térbeli koordinátaműveletek másként nem kezelhetőek hatékonyan. Az osztály felépítését a következő ábra szemlélteti: folytatás 33. ábra. A Vector3d osztály felépítése A fenti osztály segítségével a vektorok összeadása, kivonása, szorzása és osztása ugyanolyan egyszerűen történik, mint skaláris mennyiségek esetén, így a vektorokra felírt egyenletek is egyszerűen implementálhatóak. A gyakorlatban elterjedt, hogy a vektor adattípus nem osztály, hanem struktúra, de személyes tapasztalatom szerint a.net rendszerben célszerű mindent osztályokkal megoldani. 75

78 A BezierPatch osztály A es részben ismertetett bikubikus felületfoltot a BezierPatch osztály valósítja meg. Az osztály lényege, hogy egy adott háromszögelemen felállított kontrolpontsor és az és paraméter segítségével a Bézier-felület egy pontját adja vissza eredményül: private Vector3d getvector(float u, float v) { float[] fu = tparam(u); float[] fv = tparam(v); return (fu[0] * vectors[0, 0] + fu[1] * vectors[1, 0] + fu[2] * vectors[2, 0] + fu[3] * vectors[3, 0]) * fv[0] + (fu[0] * vectors[0, 1] + fu[1] * vectors[1, 1] + fu[2] * vectors[2, 1] + fu[3] * vectors[3, 1]) * fv[1] + (fu[0] * vectors[0, 2] + fu[1] * vectors[1, 2] + fu[2] * vectors[2, 2] + fu[3] * vectors[3, 2]) * fv[2] + (fu[0] * vectors[0, 3] + fu[1] * vectors[1, 3] + fu[2] * vectors[2, 3] + fu[3] * vectors[3, 3]) * fv[3]; } Geometriai osztályok A 4.1-es részben tárgyaltuk a geometria és a topológia kérdését. TIN felületmodell esetén minden estben szükségük van olyan osztályokra, amelyekkel a 4.1- es fejezetben tárgyalt algoritmusokat megvalósíthatjuk. Általánosságban a következő osztályok szükségesek: Mesh Class Face Class IEquatable<Face> Node Class IEquatable<Node> Edge Class IEquatable<Edge> 34. ábra. A geometriával és topológiával kapcsolatos osztályok A mesh osztály feladata hogy tárolja a node, edge és face osztályok példányait, amelyek magát a hálót építik fel. A node osztály tartalmazza a háló csúcspontjait, vagyis a vertexeket. Ezen felül a vertexek helyén értelmezett normálisokat és egyéb vertex paramétereket is tartalmaz. A face osztály tartalmazza a mutatókat, amelyek a háromszöget alkotó csomópontokra hivatkoznak. Ezen felül a csomópont-háromszög topológiának megfelelően a szomszédos három- 76

79 szögekre mutató indexeket is eltárolja. Az edge osztály az előzőeknek megfelelően a hálót alkotó éleket valósítja meg. Általánosságban a fenti négy osztály elegendő, hogy bármilyen háromdimenziós alakzatot megjelenítsünk és bármilyen topológikus kapcsolatot megvalósítsunk A mesh osztály Ahogyan már említettük a mesh osztály elsődleges feladata, hogy listákban tárolja a hálót alkotó éleket, lapokat és csomópontokat. 35. ábra. A mesh osztály felépítése A Normalized tulajdonság igaz, ha a hálót alkotó csomópontokban a normálvektorok meghatározottak. A this:face egy indexelő, amelynek segítségével egy adott sorszámú lapot olvashatunk ki a mesh objektumból. A Color tulajdonság a háló alapszínét tartalmazza. A mesh osztály legfontosabb metódusa a BuildTopology, melynek segítségével a node és face listák között a csomópont-háromszög topológia felállításra kerül. A BuildTopology első lépésben felhasználja a BuildNodeConnections metódust, amivel a csomópontokhoz kapcsolódó lapok kerülnek beállításra. A ConnectTriangles két lapot fűz össze a közös élük mentén, ha lehetséges. A Flip metódus két szomszédos háromszög közös élét átbillenti. Erre a kényszerített TIN háromszögelés esetén van szükség. A CalculateNormals kiszámolja a csomópontokban értelmezett normál vektorokat és a Normalized tulajdonságot true értékre állítja. 77

80 A face osztály A face osztály a csomópont-háromszög topológiának megfelelően azon mutatókat tárolja el, amelyekkel egyértelműen azonosítani lehet a lapot alkotó vertexeket (csomópontokat) és a lap szomszédos háromszögeit a mesh osztály által tartalmazott nodes és faces listákban. 36. ábra. A face osztály felépítése A háromszöget alkotó csomópontokra az IndexToNodeA, B és C int értékeke mutatnak. A háromszög szomszédos háromszögeire az IndexToFaceA, B és C int értékeke hivatkoznak. A this:int egy indexelő a háromszög csomópontjaihoz. A FaceIndices egy tömb, ami tartalmazza a lap szomszédjaira való hi- 78

81 vatkozást. A FaceType egy enum (FType) amivel a háromszög típusát állíthatjuk be, ez a TIN modellel kapcsolatos algoritmusoknál lesz fontos. A NodeIndices hasonló a FaceIndices-hez, csak itt a lapot alkotó csomópontok mutatói kerülnek eltárolásra. Látható, hogy a mutatókhoz többféleképpen is hozzáférhetünk, de ez nem vonja maga után az adatok redundáns tárolását, mivel a tulajdonságok és indexelők mind az inode[] és iface[] privát mezők (tömbök) elemihez férnek csak hozzá és azokat is módosítják. Fontos tulajdonsága még az osztálynak a FaceNormal, ami egy vektor, és a lap felületi normálisát tárolja. A RotateLeft és RotateRight metódusok a lapot alkotó vertexek mutatóit balra illetve jobbra forgatják el, ez a lapok összefűzéséhez szükséges. Az Equals(Face other) metódusra az IEquatable<Face> interfész implementálása miatt van szükség. Két lapot akkor tekintünk egyenlőnek, ha ugyanazon csomópontok alkotják őket. A ToString() az objektum belső állapotát, míg a Clone() metódus az objektum tökéletes másolatát adja vissza eredményül Az edge osztály A háló egy élét reprezentálja az osztály. Így ennek megfelelően az élt alkotó csomópontok kezdő és záró indexeit, valamint az éltől balra, ill. jobbra helyezkedő lapok indexeit tartalmazza. Edge Class IEquatable<Edge> Fields faceindex : int[] nodeindex : int[] Properties EndNode : int FaceIndex : int[] LeftFace : int NodeIndex : int[] RightFace : int StartNode : int Methods Clone() : Edge Edge() (+ 2 overloads) Equals() : bool ToString() : string 37. ábra. Az edge osztály felépítése 79

82 A node osztály A node osztály tartalmazza tulajdonképpen először a hálót alkotó térbeli pontok koordinátáit a Vertex tulajdonságban. A vektor X, Y és Z koordinátáit az azonos elnevezésű tulajdonságokon keresztül is elérhetjük. Node Class Fields IEquatable<Node> id : int linkedfaces : List<int> normal : Vector3d texcoord : TexCoord text : string vertex : Vector3d Properties ID : int Text : string X : double Y : double Z : double Methods AddFace() : bool Equals() : bool implicit operator Node() : Node Node() (+ 3 overloads) ToString() : string Vertex Normal LinkedFaces TextureCoord IComparable IComparable<Vector3d> IEquatable<Vector3d> ISerializable Vector3d Sealed Class List<T> Generic Class TexCoord Struct Fields u : float v : float Properties U : float V : float Methods TexCoord() IList<T> ICollection<T> IEnumerable<T> IList ICollection IEnumerable 38. ábra. A node osztály felépítése A térbeli pont tárolásán túl a node osztály a pontban értelmezett felületi normálist is tartalmazza a Normal property-n keresztül. Ez a normálvektor a pontot tartalmazó lapok felületi normálisainak átlagolása útján nyerhető. Ezért a szomszédos lapokat a LinkedFaces lista tartalmazza közvetlenül a csomópontháromszög topológiának megfelelően. Az AddFace metódus segítségével adhatunk lapot a listához. Ha sikerült a listához adni a lapot, akkor a metódus igaz, egyébként hamis értékkel tér vissza. A node osztály a vector3d osztály implicit konverziójára is fel van készítve, illetve a textura koordinátákat is tartalmazza. Az osztálydiagram további értelmezése már egyértelmű Rajzolással kapcsolatos osztályok Már említettük, hogy OpenGL-ben a hatékony rajzolás egyik eszköze a displaylista alkalmazása. A dolgozat során készített program is ezt a módszert alkalmazza. 80

83 Az IDisplayList interfész Az IDisplayList interfész tulajdonképpen egy tisztán elvont osztály, ennek megfelelően semmit sem valósít meg, csak rögzíti azokat a metódusokat, amiket az interfészt magában foglaló osztályoknak meg kell tudni valósítaniuk. A szükséges eljárások megismeréséhez át kell tekinteni azokat a parancsokat, amelyekkel display-listákat hozhatunk létre és törölhetünk OpenGL környezetben. Display-listát a glnewlist() és glendlist() parancsok között kiadott OpenGL parancsokkal lehet létrehozni. Egyszerre csak egy lista hozható létre. A glendlist() parancs kiadása OpenGL hibát eredményez, ha nem előzi meg lezáratlan glnewlist() parancs. A glcalllist(list) a list azonosítójú display-listát hajtja végre. Ha nem létezik list azonosítójú display-lista, akkor nem történik semmi sem. A glislist() paranccsal lekérdezhetjük, hogy egy adott azonosító használatban van-e. Végül a gldeletelists() paranccsal egymást követő indexű display-listák törölhetőek, az indexük így felszabadul. Ennek megfelelően a következő metódusokra lesz szükségünk: public interface IDisplayList { /// <summary> /// Display-lista meghívása /// </summary> void Call(); /// <summary> /// Display-lista törlése a memóriából /// </summary> void Delete(); /// <summary> /// Lekérdezi, hogy az adott azonosító már használatban van-e /// </summary> /// <returns>igaz, ha a lista az aktuális lista</returns> bool IsList(); } /// <summary> /// Újragenerálja a listát a RenderingType-nek megfelelően. /// </summary> void Regenerate(RenderingType renderingoptions); A DisplayList osztály Az IDisplayList interfész által rögzített eljárásokat a DisplayList absztrakt osztály valósítja meg. Az osztály absztrakt, ezért nem példányosítható, a belőle származtatott osztályokkal a különféle DEM modellek megjelenítésével kapcsolatos műveleteket egységesen kezelhetjük. Az osztály felépítését és a származtatott osztályokat a következő ábra szemlélteti. 81

84 IDisplayList DisplayList Abstract Class IDisplayList Interface Fields list : int Properties List : int Methods Call() : void Delete() : void DisplayList() EndList() : void IsList() : bool (+ 1 overload) NewList() : void Regenerate() : void Methods Call() : void Delete() : void IsList() : bool Regenerate() : void RenderingType Enum Vertex Wireframe Solid Shaded Rsg Class DisplayList Tin Class DisplayList IsoLine Class DisplayList 39. ábra. Az IDisplayList interfész és a DisplayList osztály felépítése Az osztály segítségével könnyedén tudjuk kezelni a display-listákat és a velük felmerülő problémák legnagyobb része is elkerülhető. Az osztály forrása a következő: public abstract class DisplayList : IDisplayList { private int list; public int List { get { return list; } set { list = value; } } public DisplayList() { list = 0; } public virtual void NewList(ListMode mode) { list = GL.GenLists(1); } GL.NewList(list, mode); 82

85 public virtual void EndList() { GL.EndList(); } public virtual bool IsList() { if (GL.IsList(list) == true) { return (true); } else { return (false); } } public static bool IsList(DisplayList displaylist) { if (GL.IsList(displayList.List) == true) { return (true); } else { return (false); } } public virtual void Call() { GL.CallList(list); } public virtual void Delete() { GL.DeleteLists(list, 1); list = 0; } } public virtual void Regenerate(RenderingType renderingoptions) { throw new Exception("The method or operation is not implemented."); } A RenderingType segítségével szabályozhatjuk a DEM modellek megjelenítését. Így renderelhetünk pont, drótváz, tömör és árnyékolt módban is. Az osztály használatához a DEM modelleket a DisplayList osztályból kell származtatni, majd felülírni a Regenerate metódust az osztály speciális igényeinek megfelelően. Az OpenGL rajzoló parancsok a RenderingType-nak megfelelően a Regenerate metódusban hajtódnak végre. 83

86 5.4.5 DEM osztályok A dolgozatban ismertetett Rsg és Tin vektoros domborzatmodellek egy lehetséges megvalósítását az Rsg és Tin osztályok mutatják be Az Rsg osztály A 4.3-as részben bemutatott Rsg DEM modellt és a hozzá kapcsoló algoritmusokat az Rsg osztály valósítja meg: 40. ábra. Az Rsg osztály felépítése 84

87 Az Rsg osztály LoadErsMap() metódusa tölti be a 4.2-es pontban ismertetett ER Mapper Raster fájlformátumot. A hozzá kapcsolodó georeferencia adatokat tulajdonságokon keresztül érhetjük el. A BoundingBox osztály példánya tartalmazza a terepmodell befoglaló méreteit, amit a Box tulajdonságon keresztül érhetünk el. A terepmodell magasságértékei a ZData, míg a felületi normálisok az NData tulajdonságokon keresztül érhetőek el. A Distortion tulajdonsággal a terepmodell magassági torzítását állíthatjuk be, alapértéke 1. A beolvasott magasságértékekből a ComputeSurfaceNormals() metódus számolja a felületi normálisokat és az értékekkel feltölti az NData tömböt. Az osztály többi része a bitmap fájlok feldolgozásával és megjelenítésével, valamint a különféle témák levezetésével kapcsolatos A Tin osztály A 4.4-es részben bemutatott Tin DEM modellt és a hozzá kapcsoló algoritmusokat a Tin osztály valósítja meg. Az osztály részletes működése a es pontban történt meg és az ott ismertetett algoritmust valósítja meg. Az osztály felépítését a lentit ábra szemlélteti: Tin Class DisplayList DisplayList IDisplayList Abstract Class Fields Properties Distoration : int MaxElevation : double MinElevation : double OffsetX : int OffsetY : int OffsetZ : int Methods DelaunayTest() : void GenerateTIN() : void InCircle2D() : bool Inside2D() : bool LeftOf2D() : bool Regenerate() : void RenderFaces() : void RenderVertices() : void RightOf2D() : bool Tin() (+ 1 overload) Triangulation() : void (+ 1 overload) Box Mesh BoundingBox Class Mesh Class 41. ábra. A Tin osztály felépítése 85

88 5.4.6 A Drawing Interchange Files (DXF) formátum A formátumot az AutoCAD grafikus szoftverhez dolgozták ki két variánsban, az egyik variáns ASCII karakterekkel tárolja a rajzot, a másik bináris formában. Jelen dolgozatban mi csak az ASCII formátum alapjaival ismerkedünk meg. A bináris forma alkalmazása viszont azért célszerű, mert ugyanaz a rajz mintegy 25%-al kisebb tároló kapacitást igényel. Nagyon sok vektoros és raszteres térképező és GIS szoftver képes DXF állományok fogadására ill. exportálásra, ezért is célszerű a formátummal megismerkedni. A formátum megértéséhez azt kell mindenek előtt tisztáznunk, hogy egy DXF lista szekciókból (részekből) áll, melyek mint látni fogjuk különböző típusúak lehetnek, de bármilyen típusúak is, SECTION karaktersorozattal kezdődnek és ENDSEC szóval végződnek [Sárközy, 1998] A formátum másik egysége a csoport, mely mindössze két sorból áll: az első sor tartalmazz a csoport kódot, a második sor pedig a csoport értéket. A DXF lista nem más, mint különböző kéttagú csoportok egymásutánja. A csoport kód minden esetben megadja, hogy értéke milyen jellegű, tehát karakteres, hexadecimális, decimális, egész vagy lebegőpontos szám, e mellett esetenként fixen, esetenként összevontan utal a jelzett érték mibenlétére. A DXF fájl részei (szekciói) elhelyezkedés és elnevezés szempontjából egy verzió vonatkozásában kötöttek, de verziószám növekedésével újabb csoportok jelenhetnek meg, például az OBJECTS (objektumok) szekció, mely a többszörös vonalak paraméter hivatkozásait is tartalmazza, vagy a CLASSES (osztályok) szekció csak a 13-as verziótól kezdődően található meg a formátumban. Ez a bővítési lehetőség azonban kétélű fegyver, mivel a bővített DXF-eket a régebbi verziók illetve transzformációs programok nem értik. Ezt megkerülendő mind az exportnál mind az importnál lehetőség van arra, hogy a fájl csak az úgy nevezett entitás szekciót tartalmazza. Egy egyszerű DXF lista a következő szekciókat tartalmazza [Sárközy, 1998]: 0 SECTION 2 HEADER Ide kerülnek azok az AutoCAD változó értékek melyek a rajz készítése során érvényben voltak 0 ENDSEC A fejezet vége, amint látjuk, valamennyi szekció végét ugyanaz a karakterkombináció jelöli 0 SECTION 2 TABLES Itt helyezkednek el az AutoCAD táblázatok pl. a VPORT, mely megadja a megjelenítő ablakok paramétereit, köztük elsőnek az aktív ablakot. Itt található az LTYPE ami a vonaltípusok jellemzőivel, a LAYER, mely tartalmazza a fedvényeket és jellemzőiket és a 86

89 STYLE mely a betűtípusokat írja le. Ugyancsak itt foglal helyet a VIEW, mely a nézeteket adja meg a szemkoordináta rendszer kezdőpontjának és a vágási síkoknak a paramétereivel. Az UCS a felhasználó által definiált koordináta rendszer. Az újabb verziókban megjelent egy BLOCK_RECORD táblázat is, mely tartalmazza az előre gyártott tömbök és a felhasználói tömbök hivatkozásait. 0 ENDSEC 0 SECTION 2 BLOCKS Ebben a fejezetben találhatók a rajzban definiált tömbök, de az újabb verziókban a rajzi egységeket, tehát a modellteret és a papírteret is tömbökben definiálják 0 ENDSEC 0 SECTION 2 ENTITIES Ez a fejezet tartalmazza a tulajdonképpeni rajzi utasításokat a hozzátartozó koordináta mondatokkal, illetve a tömbök beillesztésére vonatkozó információkat. A tömbök tulajdonságait itt nem ismétli meg a formátum csak hivatkozik arra a táblázatra a TABLES fejezetben amelyet a BLOCKS fejezet feltölt a megfelelő rajzi értékekkel 0 ENDSEC 0 EOF a fájl vége A legegyszerűbb DXF fájl is elérheti akár az 1000 sort, amiből a tényleges rajzi információ nem több mint a fájl egy ötöde. A többi információ akkor is megjelenik, ha semmit sem rajzolunk, mivel az állapot információk függetlenek a tényleges rajztól és csak a szoftver pillanatnyi beállításait és feltöltési állapotát tükrözik. Jó tudni, hogy sok szoftver DXF kimenete csak az ENTITIES és EOF fejezeteket tartalmazó csonka DXF fájlokat hoz létre. Ezek után indokolt, hogy röviden megnézzük, hogy miként írja le a rajzot a DXF az ENTITIES fejezetben (megjegyezzük, hogy a BLOCKS fejezetben a tömbök leírása nagyon hasonló eszközökkel történik, ezért erre nem térünk ki). 2 ENTITIES 0 POLYLINE Megnyitottuk az entitások fejezetet, majd a 0 csoportkóddal arra mutatunk, hogy milyen típusú rajzelemről van szó. A kód értéke tehát a rajzelem neve, esetünkben POLYLINE. A 8 csoportkód a réteg név kódja, esetünkben 0. A következő 5 csoportkód sorszámot ad a rajzi entitásnak esetünkben 31, majd a 66 kód arra utal, hogy ha értéke 1, akkor a sokszög (polyline) töréspontjai következnek [Sárközy, 1998]. 87

90 Annak érdekében, hogy a sík sokszög síkja határozott legyen, a fájl megad egy fiktív pontot a sokszög síkjában melynek a 10 kód utáni és a 20 kód utáni koordinátája mindig zérus, a 30 kód után megadott koordinátája pedig megegyezik a sík magasságával, esetünkben ez is zérus. A 70 kód értéke az attribútum milyenségét adja meg, esetünkben 1 azt jelenti, hogy a sokszög zárt. 0 VERTEX A továbbiakban már sok az ismétlődés. Megadjuk a rajzelem nevét esetünkben töréspont (VERTEX), rétegét 0, és sorszámát 32. Ezután következnek a töréspontok koordinátái, mégpedig 10-es kóddal az, 20-as kóddal az és 30-as kóddal a. Ezután hasonlóképpen felsorolja a fájl a további három töréspontot, figyeljük meg, hogy az 5 kóddal minden töréspontnak új sorszámot ad, majd a sokszögbe tartozó elemek végét a kódérték kombinációk szolgáltatják. 0 SEQEND A 0 SEQEND kombináció a töréspontok sorozatát zárja le, míg a következő két kombináció a sokszögvonalhoz rendelt, a vonal területét és hosszát megadó úgy nevezett endsequence listás objektum fedvényét és sorszámát írja le [Sárközy, 1998]. A szekcióban előforduló további csoportok a VIEWPORT-ot (megjelenítő ablakot) írják le. Ha állományokat és nem nézeteket cserélünk, úgy ezeknek a csoportoknak nincs jelentősége. A DXF fájlok részletei iránt érdeklődők további információkat talál az AutoCAD szoftver súgójában valamint a teljes dokumentáció a internetes címen is letölthető. A DXF formátumot elsősorban import és export funkciókra célszerű felhasználni mérnöki szoftverekben. A bemutatott DXF formátum egyes részleteit (export) megvalósító osztály felépítését mutatja be a következő oldalon látható osztálydiagram. 88

91 ábra. A DXF Export library felépítése DXFArc DXFFigure Class DXFEllipse DXFFigure Class DXFFigure Class DXFHatch DXFFigure Class DXFLayer DXFFigure Class DXFLine DXFFigure Class DXFMText DXFFigure Class DXFPixel DXFFigure Class DXFPolyBezier DXFPolyline Class DXFPolyline DXFFigure Class DXFRectangle DXFFigure Class DXFText DXFFigure Class DXFSolid DXFFigure Class ICloneable ICloneable ArcType Enum AutoCADVersion Enum DXFExport Class DXFHatchPatternData Struct DXFIntConst Enum DXFPoint Class DXFTables Struct HatchBoundaryType Enum Line Struct Rect Struct DimensionArrowType Enum DimensionStyle Struct DimensionType Enum DXFBlock Class DXFData Class MetaForm Class

92 6. Összefoglalás Jelen dolgozat fő célja azt volt, hogy egy olyan jövőbeli vektorgrafikus szoftver alapjait teremtse meg, ami lehetővé teszi a mélyépítésben dolgozó mérnökök számára a felmért mérési eredmények feldolgozását és megjelenítését. Véleményem szerint ezt a célt sikerült is teljesítenie, hiszen minden olyan kérdést, amivel a téma iránt érdeklődő fejlesztő találkozhat, a dolgozat érintett és a felmerülő kérdések legtöbbjére megoldást is kínált. A téma nagysága sajnos nem engedte meg, hogy minden kérdéssel azonos mélységgel és részletességgel foglalkozzak. A dolgozat talán legerősebb része a terepmodellezéshez szükséges matematikai és grafikai alapok ismertetése, külön érdekes, hogy egy alapvetően approximációs módszert (Bézier-felület) interpolációs feladatokra használtunk fel. Természetesen az Rsg és Tin DEM modellekhez kapcsolódó algoritmusok száma sem hanyagolható el a dolgozatban, igaz ez még mindig csak csekély töredéke a GIS rendszerekéhez képest. Mégis úgy gondolom, hogy érdekes olvasmány lehet mindazok számára, akik a téma iránt érdeklődnek és a terepmodellezést nem játékfejlesztőként, hanem inkább mérnöki objektumként tekintik és úgy is szeretnék kezelni. A dolgozat témája folyamatosan végigkísérte a mindennapjaimat így a problémakör mindennap egy másik arcát mutatta új kihívásokat támasztva elém, amelyeknek nem mindig tudtam ellenállni. Ennek megfelelően a dolgozatot nem tartom befejezettnek, csupán egy állomásnak egy hosszú úton ami a kitűzött cél felé vezet. A dolgozat írása közben született Meshterr nevű program koránt sem tekinthető annak a szoftvernek, amit a dolgozat írása előtt megálmodtam. Sokkal inkább az ismertetett algoritmusok és adatszerkezetek kipróbálást szolgálta csupán. Sajnos az idő rövidsége és a feladat nagysága miatt nem maradt elegendő energia a végleges változat elkészítéséhez. Ennek ellenére jó kiindulási alapot kínál majd a végleges program megtervezéséhez és elkészítéséhez. Úgy gondolom, hogy a DEM komplexitása miatt nem létezik teljes körű és mindenkor optimális megoldás a problémára. A mérnöki igények mindig újabb és újabb algoritmusokat és megoldásokat fognak igényelni. Ezért csak abban tudok reménykedni, hogy dolgozatom a téma iránt érdeklődőket újabb megoldásokra és eredményekre fogja inspirálni. 90

93 7. Irodalom [Czimber, 1997] [Czimber, 2002] [Debreczeni, 2008] [Detrekői, 1997] [Füzi, 1995] [Füzi, 1997] [Illés, 2005] [Juhász, 2003] Czimber Kornél: Geoinformatika, Egyetemi jegyzet, Soproni Egyetem, Sopron, 1997 Czimber Kornél: Korszerű geoinformatikai módszerek az erdészetben, PhD értekezés, Nyugat-magyarországi Egyetem, Erdészeti Tudományok Doktori Iskola, Sopron, 2002 Debreczeni András: Részecskerendszer OpenGL-ben, Diplomamunka, Debreceni Egyetem, Debrecen, 2008 Detrekői-Szabó: Bevezetés a térinformatikában, Nemzeti Tankönyvkiadó, Budapest, 1997 Füzi János: 3D grafika és animáció IBM PC-n, ComputerBooks, Budapest, 1995 Füzi János: Interaktív grafika, ComputerBooks, Budapest, 1997 Illés Zoltán: Programozás C# nyelven, Jedlik Oktatási Stúdió, Budapest, 2005 Juhász Imre: OpenGL, egyetemi jegyzet, mobidiák Könyvtár, Debreceni Egyetem, 2003 [Katona, 2003] Katona Endre: Térinformatika, Előadási jegyzet, Programtervező matematikus és geoinformatikus hallgatók számára, Szegedi Tudományegyetem, 2003 [Kovács, 2008] Kovács Balázs: Felületek a számítógépi grafikában, Diplomamunka, Debreceni Egyetem, Debrecen, 2008 [Lázár, 2002] Lázár Pál: Raszteres és vektoros grafikus programok összehasonlítása, Diplomamunka, Széchenyi István Egyetem, 2002 [Mark, 1984] Mark D. M.: Automated detection of drainage networks from digital elevation models, Cartographica, 21. pp , 1984 [Markó, 2006] Markó Gergely: Informatika az erdészeti feltáróhálózatok tervezésében és nyilvántartásában, PhD értekezés, Nyugat-magyarországi Egyetem, Roth Gyula Erdészeti és Vadgazdálkodási Tudományok Doktori Iskola, Sopron, 2006 [Márkus, 1995] Márkus Béla, Végső Ferenc: Térinformatika, Erdészeti és Faipari Egyetem Földmérési és Földrendezési Főiskolai Karának Térinformatikai Tanszéke, Székesfehérvár,

94 [Mélykúti, 1993] [Moore et al., 1993] [Nagy et al., 2007] [Nyisztor, 2005] [Paul, 2007] [Platt, 2001] [Sárközy, 1998] [Scharnitzky, 1999] [Schwarcz, 2005] [Szakács, 2008] [Székely et al., 1992] [Szirmay, 2001] [Szirmay et al., 2003] [Tamás, 1997] Mélykúti Gábor: Geoinformatika és a digitális felületmodell kapcsolata, Kandidátusi értekezés, Budapest, 1993 Moore, I.D.-Lewis, A.-Gallant, J.C.: Terrain properties: Estimation Methods and Scale Effects. In: Jakeman et al. (eds.): Modeling Change Wiley and Sons, New York, 1993 Nagy Ildikó, Bíró Tibor, Tamás János: Lefolyási viszonyok vizsgálata Digitális Magassági Modell felhasználásával, Agrártudományi Közlemények, 2007/26. Különszám, pp Nyisztor Károly: Grafika és játékprogramozás Direct-Xszel, SZAK Kiadó, 2005 Paul Martz: OpenGL röviden, Kiskapu Kiadó, Budapest, 2007 Platt, D. S.: Bemutatkozik a Microsoft.Net, Szak Kiadó, Bicske, 2001 Sárközy Ferenc: Térinformatikai elméleti oktató anyag, Scharnitzky Viktor: Vektorgeometria és lineáris algebra, Nemzeti Tankönyvkiadó, Budapest, 1999 Schwarcz Tibor: Bevezetés a számítógépi grafikába, Egyetemi jegyzet, Első kiadás, Debreceni Egyetem, mobidiák könyvtár, 2005 Szakács László: CSG modellek tesszellációja, Diplomamunka, Debreceni Egyetem, Debrecen, 2008 Székely Vladimír, Poppe András: A számítógépes grafika alapjai IBM PC-n, ComputerBooks, Budapest, 1992 Szirmay-Kalos László: Számítógépes grafika, Budapest, ComputerBooks, 2001 Szirmay-Kalos László, Antal György, Csonka Ferenc: Háromdimenziós grafika, animáció és játékfejlesztés, Budapest, ComputerBooks, 2003 Tamás János: Térinformatika és környezeti modellezés, Elektronikus jegyzet, 1997 [Vlachos et al., 2001] Vlachos, Alex, Jörg Peters, Chas Boyd, and Jason L. Mitchell: Curved PN Triangles, ACM Symposium on Interactive 3D Graphics 2001, pp ,

95 8. Köszönetnyilvánítás Köszönettel tartozom a Geomatikai, Erdőfeltárási és Vízgazdálkodási Intézet munkatársainak, akik megmutatták a mérnöki alkotás szépségét és biztosították a kreatív munkakörnyezetet számomra. Köszönöm Dr. Czimber Kornél úrnak, hogy segítséget nyújtott a terepmodellezéssel kapcsolatos algoritmusok tanulmányozásában és mindig szakított rám időt elfoglaltságai ellenére. Köszönöm családomnak a türelmet és a támogatást, barátimnak pedig az észrevételeket és az építő kritikákat. 93

96 9. Melléklet A Meshterr demonstrációs program képernyőképe Tin DEM magasság és lejtés szerint színezve 94

rendszerek egy olyan speciális csoportját

rendszerek egy olyan speciális csoportját Geoinformációs rendszer A geoinformációs rends rendszerek a térinformációs rendszerek egy olyan speciális csoportját alkotják, melyek a földdel, mint közvetlen környezetünkkel foglalkoznak foglalkoznak.

Részletesebben

Klár Gergely 2010/2011. tavaszi félév

Klár Gergely 2010/2011. tavaszi félév Számítógépes Grafika Klár Gergely tremere@elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2010/2011. tavaszi félév Tartalom Pont 1 Pont 2 3 4 5 Tartalom Pont Descartes-koordináták Homogén koordináták

Részletesebben

Számítógépes Grafika mintafeladatok

Számítógépes Grafika mintafeladatok Számítógépes Grafika mintafeladatok Feladat: Forgassunk a 3D-s pontokat 45 fokkal a X tengely körül, majd nyújtsuk az eredményt minden koordinátájában kétszeresére az origóhoz képest, utána forgassunk

Részletesebben

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja. Testmodellezés Testmodellezés (Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja. A tervezés (modellezés) során megadjuk a objektum geometria

Részletesebben

Digitális Domborzat Modellek (DTM)

Digitális Domborzat Modellek (DTM) Digitális Domborzat Modellek (DTM) Digitális Domborzat Modellek (DTM) Digitális Domborzat Modellek (DTM) DTM fogalma A földfelszín számítógéppel kezelhető topográfiai modellje Cél: tetszőleges pontban

Részletesebben

Termék modell. Definíció:

Termék modell. Definíció: Definíció: Termék modell Összetett, többfunkciós, integrált modell (számítógépes reprezentáció) amely leír egy műszaki objektumot annak különböző életfázis szakaszaiban: tervezés, gyártás, szerelés, szervízelés,

Részletesebben

MIKOVINY SÁMUEL TÉRINFORMATIKAI EMLÉKVERSENY

MIKOVINY SÁMUEL TÉRINFORMATIKAI EMLÉKVERSENY FVM VIDÉKFEJLESZTÉSI, KÉPZÉSI ÉS SZAKTANÁCSADÁSI INTÉZET NYUGAT-MAGYARORSZÁGI EGYETEM GEOINFORMATIKAI KAR MIKOVINY SÁMUEL TÉRINFORMATIKAI EMLÉKVERSENY 2009/2010. TANÉV Az I. FORDULÓ FELADATAI 1. feladat:

Részletesebben

Görbe- és felületmodellezés. Szplájnok Felületmodellezés

Görbe- és felületmodellezés. Szplájnok Felületmodellezés Görbe- és felületmodellezés Szplájnok Felületmodellezés Spline (szplájn) Spline: Szakaszosan, parametrikus polinomokkal leírt görbe A spline nevét arról a rugalmasan hajlítható vonalzóról kapta, melyet

Részletesebben

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

Láthatósági kérdések Láthatósági kérdések Láthatósági algoritmusok Adott térbeli objektum és adott nézőpont esetén el kell döntenünk, hogy mi látható az adott alakzatból a nézőpontból, vagy irányából nézve. Az algoritmusok

Részletesebben

DIGITÁLIS TEREPMODELL A TÁJRENDEZÉSBEN

DIGITÁLIS TEREPMODELL A TÁJRENDEZÉSBEN DIGITÁLIS TEREPMODELL A TÁJRENDEZÉSBEN DR. GIMESI LÁSZLÓ Bevezetés Pécsett és környékén végzett bányászati tevékenység felszámolása kapcsán szükségessé vált az e tevékenység során keletkezett meddők, zagytározók,

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA MATEmATIkA I 8 VIII VEkTOROk 1 VEkTOR Vektoron irányított szakaszt értünk Jelölése: stb Vektorok hossza A vektor abszolút értéke az irányított szakasz hossza Ha a vektor hossza egységnyi akkor

Részletesebben

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben? . Mi az (x, y) koordinátákkal megadott pont elforgatás uténi két koordinátája, ha α szöggel forgatunk az origó körül? x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA MATEmATIkA I 6 VI KOmPLEX SZÁmOk 1 A komplex SZÁmOk HALmAZA A komplex számok olyan halmazt alkotnak amelyekben elvégezhető az összeadás és a szorzás azaz két komplex szám összege és szorzata

Részletesebben

MÉSZÁROS JÓZSEFNÉ, NUMERIKUS MÓDSZEREK

MÉSZÁROS JÓZSEFNÉ, NUMERIKUS MÓDSZEREK MÉSZÁROS JÓZSEFNÉ, NUmERIKUS módszerek 9 FÜGGVÉNYKÖZELÍTÉSEK IX. SPLINE INTERPOLÁCIÓ 1. SPLINE FÜGGVÉNYEK A Lagrange interpolációnál említettük, hogy az ún. globális interpoláció helyett gyakran célszerű

Részletesebben

Összeállította: dr. Leitold Adrien egyetemi docens

Összeállította: dr. Leitold Adrien egyetemi docens Az R 3 tér geometriája Összeállította: dr. Leitold Adrien egyetemi docens 2008.09.08. 1 Vektorok Vektor: irányított szakasz Jel.: a, a, a, AB, Jellemzői: irány, hosszúság, (abszolút érték) jel.: a Speciális

Részletesebben

Földfelszín modellezés

Földfelszín modellezés Földfelszín modellezés A topográfia és kartográfia a digitális világban Dr. Juhász Attila 2011. Tartalom Előszó... 4 1. A digitális topográfia és kartográfia alapfogalmai... 5 1.1. A topográfiai modellezés...

Részletesebben

Számítógépes Grafika SZIE YMÉK

Számítógépes Grafika SZIE YMÉK Számítógépes Grafika SZIE YMÉK Analóg - digitális Analóg: a jel értelmezési tartománya (idő), és az értékkészletes is folytonos (pl. hang, fény) Diszkrét idejű: az értelmezési tartomány diszkrét (pl. a

Részletesebben

Számítógépes Grafika mintafeladatok

Számítógépes Grafika mintafeladatok Számítógépes Grafika mintafeladatok Feladat: Forgassunk a 3D-s pontokat 45 fokkal a X tengely körül, majd nyújtsuk az eredményt minden koordinátájában kétszeresére az origóhoz képest, utána forgassunk

Részletesebben

Hajder Levente 2018/2019. II. félév

Hajder Levente 2018/2019. II. félév Hajder Levente hajder@inf.elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2018/2019. II. félév Tartalom 1 2 Törtvonal Felületi folytonosságok B-spline Spline variánsok Felosztott (subdivision) görbék

Részletesebben

A tér lineáris leképezései síkra

A tér lineáris leképezései síkra A tér lineáris leképezései síkra Az ábrázoló geometria célja: A háromdimenziós térben elhelyezkedő alakzatok helyzeti és metrikus viszonyainak egyértelmű és egyértelműen rekonstruálható módon történő ábrázolása

Részletesebben

CAD Rendszerek I. Sajátosság alapú tervezés - Szinkron modellezés

CAD Rendszerek I. Sajátosság alapú tervezés - Szinkron modellezés CAD Rendszerek I. Sajátosság alapú tervezés - Szinkron modellezés Farkas Zsolt Budapesti Műszaki és Gazdaságtudományi Egyetem, Gép- és Terméktervezés Tanszék 1/ 14 Tartalom -Sajátosság alapú tervezés:

Részletesebben

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög.

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög. 1 Összeadás: Legyen a (7; 3) és b (- 2; 4), akkor az összegük a + b (7 + (-2); 3 + 4) = (5; 7) Kivonás: Legyen a (7; 3) és b (- 2; 4), akkor a különbségük a b (7 - (-2); 3-4)=(9; - 1) Valós számmal való

Részletesebben

Térbeli transzformációk, a tér leképezése síkra

Térbeli transzformációk, a tér leképezése síkra Térbeli transzformációk, a tér leképezése síkra Homogén koordináták bevezetése térben A tér minden P pontjához kölcsönösen egyértelműen egy valós (x, y, z) számhármast rendeltünk hozzá. (Descartes-féle

Részletesebben

Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit

Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit 1. Tekintsünk a térben egy P (p 1, p 2, p 3 ) pontot és egy v = (v 1, v 2, v 3 ) = 0 vektort. Ekkor pontosan egy egyenes létezik,

Részletesebben

Matematika A1a Analízis

Matematika A1a Analízis B U D A P E S T I M Ű S Z A K I M A T E M A T I K A É S G A Z D A S Á G T U D O M Á N Y I I N T É Z E T E G Y E T E M Matematika A1a Analízis BMETE90AX00 Vektorok StKis, EIC 2019-02-12 Wettl Ferenc ALGEBRA

Részletesebben

2014/2015. tavaszi félév

2014/2015. tavaszi félév Hajder L. és Valasek G. hajder.levente@sztaki.mta.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2014/2015. tavaszi félév Tartalom Geometria modellezés 1 Geometria modellezés 2 Geometria modellezés

Részletesebben

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

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását. 11. Geometriai elemek 883 11.3. Vonallánc A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását. A vonallánc egy olyan alapelem, amely szakaszok láncolatából áll. A sokszög

Részletesebben

10. Koordinátageometria

10. Koordinátageometria I. Nulladik ZH-ban láttuk: 0. Koordinátageometria. Melyek azok a P x; y pontok, amelyek koordinátái kielégítik az Ábrázolja a megoldáshalmazt a koordináta-síkon! x y x 0 egyenlőtlenséget? ELTE 00. szeptember

Részletesebben

Az ErdaGIS térinformatikai keretrendszer

Az ErdaGIS térinformatikai keretrendszer Az ErdaGIS térinformatikai keretrendszer Két évtized tapasztalatát sűrítettük ErdaGIS térinformatikai keretrendszerünkbe, mely moduláris felépítésével széleskörű felhasználói réteget céloz, és felépítését

Részletesebben

Környezeti informatika

Környezeti informatika Környezeti informatika Alkalmazható természettudományok oktatása a tudásalapú társadalomban TÁMOP-4.1.2.A/1-11/1-2011-0038 Eger, 2012. november 22. Utasi Zoltán Eszterházy Károly Főiskola, Földrajz Tanszék

Részletesebben

Regresszió számítás. Tartalomjegyzék: GeoEasy V2.05+ Geodéziai Kommunikációs Program

Regresszió számítás. Tartalomjegyzék: GeoEasy V2.05+ Geodéziai Kommunikációs Program Regresszió számítás GeoEasy V2.05+ Geodéziai Kommunikációs Program DigiKom Kft. 2006-2010 Tartalomjegyzék: Egyenes x változik Egyenes y változik Egyenes y és x változik Kör Sík z változik Sík y, x és z

Részletesebben

Matematika szigorlat június 17. Neptun kód:

Matematika szigorlat június 17. Neptun kód: Név Matematika szigorlat 014. június 17. Neptun kód: 1.. 3. 4. 5. Elm. Fel. Össz. Oszt. Az eredményes szigorlat feltétele elméletből legalább 0 pont, feladatokból pedig legalább 30 pont elérése. A szigorlat

Részletesebben

Numerikus integrálás

Numerikus integrálás Közelítő és szimbolikus számítások 11. gyakorlat Numerikus integrálás Készítette: Gelle Kitti Csendes Tibor Somogyi Viktor Vinkó Tamás London András Deák Gábor jegyzetei alapján 1. Határozatlan integrál

Részletesebben

Matematika (mesterképzés)

Matematika (mesterképzés) Matematika (mesterképzés) Környezet- és Településmérnököknek Debreceni Egyetem Műszaki Kar, Műszaki Alaptárgyi Tanszék Vinczéné Varga A. Környezet- és Településmérnököknek 2016/2017/I 1 / 29 Lineáris tér,

Részletesebben

Mezők/oszlopok: Az egyes leíró adat kategóriákat mutatják.

Mezők/oszlopok: Az egyes leíró adat kategóriákat mutatják. 54 581 01 0010 54 01 FÖLDMÉRŐ ÉS TÉRINFORMATIKAI TECHNIKUS 54 581 01 0010 54 02 TÉRKÉPÉSZ TECHNIKUS szakképesítések 2244-06 A térinformatika feladatai A térinformatika területei, eszközrendszere vizsgafeladat

Részletesebben

17. előadás: Vektorok a térben

17. előadás: Vektorok a térben 17. előadás: Vektorok a térben Szabó Szilárd A vektor fogalma A mai előadásban n 1 tetszőleges egész szám lehet, de az egyszerűség kedvéért a képletek az n = 2 esetben szerepelnek. Vektorok: rendezett

Részletesebben

TÉRINFORMATIKA II. Dr. Kulcsár Balázs Ph.D. adjunktus. Debreceni Egyetem Műszaki Kar Műszaki Alaptárgyi Tanszék

TÉRINFORMATIKA II. Dr. Kulcsár Balázs Ph.D. adjunktus. Debreceni Egyetem Műszaki Kar Műszaki Alaptárgyi Tanszék TÉRINFORMATIKA II. Dr. Kulcsár Balázs Ph.D. adjunktus Debreceni Egyetem Műszaki Kar Műszaki Alaptárgyi Tanszék MÁSODLAGOS ADATNYERÉSI ELJÁRÁSOK Meglévő (analóg) térképek manuális digitalizálása 1 A meglévő

Részletesebben

Vektorok és koordinátageometria

Vektorok és koordinátageometria Vektorok és koordinátageometria Vektorral kapcsolatos alapfogalmak http://zanza.tv/matematika/geometria/vektorok-bevezetese Definíció: Ha egy szakasz két végpontját megkülönböztetjük egymástól oly módon,

Részletesebben

Lineáris algebra numerikus módszerei

Lineáris algebra numerikus módszerei Hermite interpoláció Tegyük fel, hogy az x 0, x 1,..., x k [a, b] különböző alappontok (k n), továbbá m 0, m 1,..., m k N multiplicitások úgy, hogy Legyenek adottak k m i = n + 1. i=0 f (j) (x i ) = y

Részletesebben

Tanmenetjavaslat. Téma Óraszám Tananyag Fogalmak Összefüggések Eszközök Kitekintés. Helyi érték, alaki érték. Számegyenes.

Tanmenetjavaslat. Téma Óraszám Tananyag Fogalmak Összefüggések Eszközök Kitekintés. Helyi érték, alaki érték. Számegyenes. Heti 4 óra esetén, 37 tanítási hétre összesen 148 óra áll rendelkezésre. A tanmenet 132 óra beosztását tartalmazza. Heti 5 óra esetén összesen 37-tel több órában dolgozhatunk. Ez összesen 185 óra. Itt

Részletesebben

3D Számítógépes Geometria II.

3D Számítógépes Geometria II. 3D Számítógépes Geometria II. 1. Bevezetés http://cg.iit.bme.hu/portal/3dgeo2 https://www.vik.bme.hu/kepzes/targyak/viiiav16 Dr. Várady Tamás, Dr. Salvi Péter BME, Villamosmérnöki és Informatikai Kar Irányítástechnika

Részletesebben

Transzformációk. Grafikus játékok fejlesztése Szécsi László 2013.02.26. t05-transform

Transzformációk. Grafikus játékok fejlesztése Szécsi László 2013.02.26. t05-transform Transzformációk Grafikus játékok fejlesztése Szécsi László 2013.02.26. t05-transform Koordinátarendszerek: modelltér Koordinátarendszerek: világtér Koordinátarendszerek: kameratér up right z eye ahead

Részletesebben

KOVÁCS BÉLA, MATEMATIKA II.

KOVÁCS BÉLA, MATEMATIKA II. KOVÁCS BÉLA MATEmATIkA II 6 VI TÉRGÖRbÉk 1 Alapvető ÖSSZEFÜGGÉSEk A térgörbe (1) alakú egyenletével írható le Ez a vektoregyenlet egyenértékű az (2) skaláris egyenletrendszerrel A térgörbe három nevezetes

Részletesebben

Erdészeti útügyi információs rendszerek

Erdészeti útügyi információs rendszerek Erdészeti útügyi információs rendszerek PÉTERFALVI József, MARKÓ Gergely, KOSZTKA Miklós 1 Az erdészeti útügyi információs rendszerek célja a feltáróhálózatok térképi vonalai és az azokhoz kapcsolt leíró

Részletesebben

Lengyelné Dr. Szilágyi Szilvia április 7.

Lengyelné Dr. Szilágyi Szilvia április 7. ME, Anaĺızis Tanszék 2010. április 7. , alapfogalmak 2.1. Definíció A H 1, H 2,..., H n R (ahol n 2 egész szám) nemüres valós számhalmazok H 1 H 2... H n Descartes-szorzatán a következő halmazt értjük:

Részletesebben

Csoportosítás. Térinformatikai műveletek, elemzések. Csoportosítás. Csoportosítás

Csoportosítás. Térinformatikai műveletek, elemzések. Csoportosítás. Csoportosítás Csoportosítás Térinformatikai műveletek, elemzések Leíró (attribútum) adatokra vonatkozó kérdések, műveletek, elemzések, csoportosítások,... Térbeli (geometriai) adatokra vonatkozó kérdések, műveletek

Részletesebben

Matematikai geodéziai számítások 5.

Matematikai geodéziai számítások 5. Matematikai geodéziai számítások 5 Hibaterjedési feladatok Dr Bácsatyai László Matematikai geodéziai számítások 5: Hibaterjedési feladatok Dr Bácsatyai László Lektor: Dr Benedek Judit Ez a modul a TÁMOP

Részletesebben

PTE PMMF Közmű- Geodéziai Tanszék

PTE PMMF Közmű- Geodéziai Tanszék digitális állományok átvétele, meglévő térképek digitalizálása, meglévő térképek, légifelvételek, illetve speciális műszaki rajzi dokumentációk szkennelése és transzformálása. A leggyorsabb, legolcsóbb

Részletesebben

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

3D-s számítógépes geometria és alakzatrekonstrukció 3D-s számítógépes geometria és alakzatrekonstrukció 14. Digitális Alakzatrekonstrukció - Bevezetés http://cg.iit.bme.hu/portal/node/312 https://www.vik.bme.hu/kepzes/targyak/viiiav08 Dr. Várady Tamás,

Részletesebben

Felületek differenciálgeometriai vizsgálata

Felületek differenciálgeometriai vizsgálata Felületek differenciálgeometriai vizsgálata Felületek differenciálgeometriai értelemben Felület: Olyan alakzat, amely előállítható az (u,v) sík egy összefüggő tartományán értelmezett r(u,v) kétparaméteres

Részletesebben

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

3D számítógépes geometria és alakzatrekonstrukció 3D számítógépes geometria és alakzatrekonstrukció 14. Digitális Alakzatrekonstrukció - Bevezetés http://cg.iit.bme.hu/portal/node/312 https://www.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Dr.

Részletesebben

A DIGITÁLIS TÉRKÉP ADATAINAK ELŐÁLLÍTÁSA, ADATNYERÉSI ELJÁRÁSOK

A DIGITÁLIS TÉRKÉP ADATAINAK ELŐÁLLÍTÁSA, ADATNYERÉSI ELJÁRÁSOK A DIGITÁLIS TÉRKÉP ADATAINAK ELŐÁLLÍTÁSA, ADATNYERÉSI ELJÁRÁSOK - két féle adatra van szükségünk: térbeli és leíró adatra - a térbeli adat előállítása a bonyolultabb. - a költségek nagyjából 80%-a - munkaigényes,

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

Többváltozós, valós értékű függvények

Többváltozós, valós értékű függvények TÖ Többváltozós, valós értékű függvények TÖ Definíció: többváltozós függvények Azokat a függvényeket, melyeknek az értelmezési tartománya R n egy részhalmaza, n változós függvényeknek nevezzük. TÖ Példák:.

Részletesebben

Vektorok összeadása, kivonása, szorzás számmal, koordináták

Vektorok összeadása, kivonása, szorzás számmal, koordináták Vektorok összeadása, kivonása, szorzás számmal, koordináták 1. Mik lesznek a P (3, 4, 8) pont C (3, 7, 2) pontra vonatkozó tükörképének a koordinátái? 2. Egy szabályos hatszög középpontja K (4, 1, 4),

Részletesebben

Parametrikus tervezés

Parametrikus tervezés 2012.03.31. Statikus modell Dinamikus modell Parametrikus tervezés Módosítások a tervezés folyamán Konstrukciós variánsok (termékcsaládok) Parametrikus Modell Parametrikus tervezés Paraméterek (változók

Részletesebben

Készítette: Enisz Krisztián, Lugossy Balázs, Speiser Ferenc, Ughy Gergely 2010.11.29. 1

Készítette: Enisz Krisztián, Lugossy Balázs, Speiser Ferenc, Ughy Gergely 2010.11.29. 1 Készítette: Enisz Krisztián, Lugossy Balázs, Speiser Ferenc, Ughy Gergely 2010.11.29. 1 /17 Tartalomjegyzék A térinformatikáról általánosságban Célok Felhasznált eszközök Fejlesztés lépései Adatbázis Grafikus

Részletesebben

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás 3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás ek - 2019. április 2. http://cg.iit.bme.hu/portal/node/312 https://www.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Dr. Salvi Péter BME,

Részletesebben

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit 1. A térbeli irányított szakaszokat vektoroknak hívjuk. Két vektort egyenlőnek tekintünk, ha párhuzamos eltolással fedésbe hozhatók.

Részletesebben

Matematika szóbeli érettségi témakörök 2016/2017-es tanév őszi vizsgaidőszak

Matematika szóbeli érettségi témakörök 2016/2017-es tanév őszi vizsgaidőszak Matematika szóbeli érettségi témakörök 2016/2017-es tanév őszi vizsgaidőszak Halmazok Halmazok egyenlősége Részhalmaz, valódi részhalmaz Üres halmaz Véges és végtelen halmaz Halmazműveletek (unió, metszet,

Részletesebben

Egyenletek, egyenlőtlenségek VII.

Egyenletek, egyenlőtlenségek VII. Egyenletek, egyenlőtlenségek VII. Magasabbfokú egyenletek: A 3, vagy annál nagyobb fokú egyenleteket magasabb fokú egyenleteknek nevezzük. Megjegyzés: Egy n - ed fokú egyenletnek legfeljebb n darab valós

Részletesebben

Keresztmetszet másodrendű nyomatékainak meghatározása

Keresztmetszet másodrendű nyomatékainak meghatározása BUDAPEST MŰSZAK ÉS GAZDASÁGTUDOMÁNY EGYETEM Keresztmetszet másodrendű nyomatékainak meghatározása Segédlet a Szilárdságtan c tárgy házi feladatához Készítette: Lehotzky Dávid Budapest, 205 február 28 ábra

Részletesebben

Transzformációk. Szécsi László

Transzformációk. Szécsi László Transzformációk Szécsi László A feladat Adott a 3D modell háromszögek csúcspontjai [modellezési koordináták] Háromszögkitöltő algoritmus pixeleket színez be [viewport koordináták] A feladat: számítsuk

Részletesebben

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010. Nagy András Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 010. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 1) Döntsd el, hogy a P pont illeszkedik-e az e egyenesre

Részletesebben

Példa: Tartó lehajlásfüggvényének meghatározása végeselemes módszer segítségével

Példa: Tartó lehajlásfüggvényének meghatározása végeselemes módszer segítségével Példa: Tartó lehajlásfüggvényének meghatározása végeselemes módszer segítségével Készítette: Dr. Kossa Attila (kossa@mm.bme.hu) BME, Műszaki Mechanikai Tanszék 213. október 8. Javítva: 213.1.13. Határozzuk

Részletesebben

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor: I. Vektorok 1. Vektorok összege Általánosan: Az ábra alapján Adott: a(4; 1) és b(; 3) a + b (4 + ; 1 + 3) = (6; ) a(a 1 ; a ) és b(b 1 ; b ) a + b(a 1 + b 1 ; a + b ). Vektorok különbsége Általánosan:

Részletesebben

Matematika III előadás

Matematika III előadás Matematika III. - 2. előadás Vinczéné Varga Adrienn Debreceni Egyetem Műszaki Kar, Műszaki Alaptárgyi Tanszék Előadáskövető fóliák Vinczéné Varga Adrienn (DE-MK) Matematika III. 2016/2017/I 1 / 23 paramétervonalak,

Részletesebben

Geometriai modellezés. Szécsi László

Geometriai modellezés. Szécsi László Geometriai modellezés Szécsi László Adatáramlás vezérlés Animáció világleírás Modellezés kamera Virtuális világ kép Képszintézis A modellezés részfeladatai Geometria megadása [1. előadás] pont, görbe,

Részletesebben

3D Számítógépes Geometria II.

3D Számítógépes Geometria II. 3D Számítógépes Geometria II. 1. Bevezetés http://cg.iit.bme.hu/portal/3dgeo2 https://www.vik.bme.hu/kepzes/targyak/viiiav16 Dr. Várady Tamás, Dr. Salvi Péter BME, Villamosmérnöki és Informatikai Kar Irányítástechnika

Részletesebben

Diszkréten mintavételezett függvények

Diszkréten mintavételezett függvények Diszkréten mintavételezett függvények A függvény (jel) értéke csak rögzített pontokban ismert, de köztes pontokban is meg akarjuk becsülni időben mintavételezett jel pixelekből álló műholdkép rácson futtatott

Részletesebben

A végeselem módszer alapjai. 2. Alapvető elemtípusok

A végeselem módszer alapjai. 2. Alapvető elemtípusok A végeselem módszer alapjai Előadás jegyzet Dr. Goda Tibor 2. Alapvető elemtípusok - A 3D-s szerkezeteket vagy szerkezeti elemeket gyakran egyszerűsített formában modellezzük rúd, gerenda, 2D-s elemek,

Részletesebben

Követelmény az 5. évfolyamon félévkor matematikából

Követelmény az 5. évfolyamon félévkor matematikából Követelmény az 5. évfolyamon félévkor matematikából Gondolkodási és megismerési módszerek Néhány elem kiválasztása adott szempont szerint. Néhány elem sorba rendezése, az összes lehetséges sorrend felsorolása.

Részletesebben

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010 INFORMATIKA ÁGAZATI ALKALMAZÁSAI Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP-4.1.2-08/1/A-2009-0010 7. Digitális térképezés, georeferálás, vektorizálás Digitális térkép Fogalma Jellemzői Georeferálás

Részletesebben

MATLAB. 5. gyakorlat. Polinomok, deriválás, integrálás

MATLAB. 5. gyakorlat. Polinomok, deriválás, integrálás MATLAB 5. gyakorlat Polinomok, deriválás, integrálás Menetrend Kis ZH Polinomok Numerikus deriválás Numerikus integrálás (+ anonim függvények) pdf Kis ZH Polinomok Sok függvény és valós folyamat leírható

Részletesebben

Hajder Levente 2017/2018. II. félév

Hajder Levente 2017/2018. II. félév Hajder Levente hajder@inf.elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2017/2018. II. félév Tartalom 1 2 3 Geometriai modellezés feladata A világunkat modellezni kell a térben. Valamilyen koordinátarendszer

Részletesebben

Példa: Tartó lehajlásfüggvényének meghatározása a Rayleigh Ritz-féle módszer segítségével

Példa: Tartó lehajlásfüggvényének meghatározása a Rayleigh Ritz-féle módszer segítségével Példa: Tartó lehajlásfüggvényének meghatározása a Rayleigh Ritz-féle módszer segítségével Készítette: Dr. Kossa Attila (kossa@mm.bme.hu) BME, Műszaki Mechanikai Tanszék 2013. szeptember 23. Javítva: 2013.10.09.

Részletesebben

Transzformációk síkon, térben

Transzformációk síkon, térben Transzformációk síkon, térben Leképezés, transzformáció Leképezés: Ha egy A ponttér pontjaihoz egy másik B ponttér pontjait kölcsönösen egyértelműen rendeljük hozzá, akkor ezt a hozzárendelést leképezésnek

Részletesebben

Koordinátageometria. , azaz ( ) a B halmazt pontosan azok a pontok alkotják, amelynek koordinátáira:

Koordinátageometria. , azaz ( ) a B halmazt pontosan azok a pontok alkotják, amelynek koordinátáira: 005-0XX Emelt szint Koordinátageometria 1) a) Egy derékszögű háromszög egyik oldalegyenese valamelyik koordinátatengely, egy másik oldalegyenesének egyenlete x + y = 10, egyik csúcsa az origó. Hány ilyen

Részletesebben

Vektorok, mátrixok, lineáris egyenletrendszerek

Vektorok, mátrixok, lineáris egyenletrendszerek a Matematika mérnököknek I. című tárgyhoz Vektorok, mátrixok, lineáris egyenletrendszerek Vektorok A rendezett valós számpárokat kétdimenziós valós vektoroknak nevezzük. Jelölésükre latin kisbetűket használunk.

Részletesebben

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés Felületmegjelenítés Megjelenítés paramétervonalakkal Drótvázas megjelenítés Megjelenítés takarással Triviális hátsólap eldobás A z-puffer algoritmus Megvilágítás és árnyalás Megjelenítés paramétervonalakkal

Részletesebben

Lineáris algebra mérnököknek

Lineáris algebra mérnököknek B U D A P E S T I M Ű S Z A K I M A T E M A T I K A É S G A Z D A S Á G T U D O M Á N Y I I N T É Z E T E G Y E T E M Lineáris algebra mérnököknek BMETE93BG20 Vektorok a 2- és 3-dimenziós tér Kf87 2017-09-05

Részletesebben

15. LINEÁRIS EGYENLETRENDSZEREK

15. LINEÁRIS EGYENLETRENDSZEREK 15 LINEÁRIS EGYENLETRENDSZEREK 151 Lineáris egyenletrendszer, Gauss elimináció 1 Definíció Lineáris egyenletrendszernek nevezzük az (1) a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + + a

Részletesebben

Egy sík és a koordinátasíkok metszésvonalainak meghatározása

Egy sík és a koordinátasíkok metszésvonalainak meghatározása 1 Egy sík és a koordinátasíkok metszésvonalainak meghatározása Ehhez tekintsük az 1. ábrát! 1. ábra Itt az ( u, v, w ) tengelymetszeteivel adott S síkot látjuk, az Oxyz térbeli derékszögű koordináta -

Részletesebben

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás 3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás Önálló projektek - 2017. április 7. http://cg.iit.bme.hu/portal/node/312 https://www.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Dr.

Részletesebben

Matematika osztályozó vizsga témakörei 9. évfolyam II. félév:

Matematika osztályozó vizsga témakörei 9. évfolyam II. félév: Matematika osztályozó vizsga témakörei 9. évfolyam II. félév: 7. Függvények: - függvények fogalma, megadása, ábrázolás koordináta- rendszerben - az elsőfokú függvény, lineáris függvény - a másodfokú függvény

Részletesebben

Példa: Háromszög síkidom másodrendű nyomatékainak számítása

Példa: Háromszög síkidom másodrendű nyomatékainak számítása Példa: Háromszög síkidom másodrendű nyomatékainak számítása Készítette: Dr. Kossa Attila kossa@mm.bme.hu) BME, Műszaki Mechanikai Tanszék. február 6. Határozzuk meg az alábbi ábrán látható derékszögű háromszög

Részletesebben

Koordináta-geometria feladatgyűjtemény

Koordináta-geometria feladatgyűjtemény Koordináta-geometria feladatgyűjtemény A feladatok megoldásai a dokumentum végén találhatók Vektorok 1. Egy négyzet két szemközti csúcsának koordinátái: A( ; 7) és C(4 ; 1). Határozd meg a másik két csúcs

Részletesebben

Számítógépes grafika

Számítógépes grafika Számítógépes grafika HEFOP 3.5.1 Korszerű felnőttképzési módszerek kifejlesztése és alkalmazása EMIR azonosító: HEFOP-3.5.1-K-2004-10-0001/2.0 Tananyagfejlesztő: Máté István Lektorálta: Brückler Tamás

Részletesebben

2018/2019. Matematika 10.K

2018/2019. Matematika 10.K Egész éves dolgozat szükséges felszerelés: toll, ceruza, radír, vonalzó, körző, számológép, függvénytáblázat 2 órás, 4 jegyet ér 2019. május 27-31. héten Aki hiányzik, a következő héten írja meg, e nélkül

Részletesebben

Követelmény a 6. évfolyamon félévkor matematikából

Követelmény a 6. évfolyamon félévkor matematikából Követelmény a 6. évfolyamon félévkor matematikából Gondolkodási és megismerési módszerek Halmazba rendezés adott tulajdonság alapján, részhalmaz felírása, felismerése. Két véges halmaz közös részének,

Részletesebben

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei A Gauss-Jordan elimináció, mátrixinvertálás Gauss-Jordan módszer Ugyanazzal a technikával, mint ahogy a k-adik oszlopban az a kk alatti elemeket kinulláztuk, a fölötte lévő elemeket is zérussá lehet tenni.

Részletesebben

Matematikai geodéziai számítások 5.

Matematikai geodéziai számítások 5. Nyugat-magyarországi Egyetem Geoinformatikai Kara Dr Bácsatyai László Matematikai geodéziai számítások 5 MGS5 modul Hibaterjedési feladatok SZÉKESFEHÉRVÁR 2010 Jelen szellemi terméket a szerzői jogról

Részletesebben

MATEMATIKA EMELT SZINTŰ SZÓBELI VIZSGA TÉMAKÖREI (TÉTELEK) 2005

MATEMATIKA EMELT SZINTŰ SZÓBELI VIZSGA TÉMAKÖREI (TÉTELEK) 2005 2005 1. * Halmazok, halmazműveletek, nevezetes ponthalmazok 2. Számhalmazok, halmazok számossága 3. Hatványozás, hatványfüggvény 4. Gyökvonás, gyökfüggvény 5. A logaritmus. Az exponenciális és a logaritmus

Részletesebben

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor 12. előadás Egyenletrendszerek, mátrixok Dr. Szörényi Miklós, Dr. Kallós Gábor 2015 2016 1 Tartalom Matematikai alapok Vektorok és mátrixok megadása Tömbkonstansok Lineáris műveletek Mátrixok szorzása

Részletesebben

Eddig csak a polinom x-ben felvett értékét kerestük

Eddig csak a polinom x-ben felvett értékét kerestük Interpolációs polinom együtthatói Eddig csak a polinom x-ben felvett értékét kerestük Ez jó, ha kevés x-re kell kiértékelni Ha sok ismeretlen f (x)-et keresünk, akkor jobb kiszámolni az együtthatókat,

Részletesebben

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI statisztika 10 X. SZIMULÁCIÓ 1. VÉLETLEN számok A véletlen számok fontos szerepet játszanak a véletlen helyzetek generálásában (pénzérme, dobókocka,

Részletesebben

Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók)

Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók) Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók) Vektorok 1. Egy négyzet két szemközti csúcsának koordinátái: A( ; 7) és C(4 ; 1). Határozd meg a másik két

Részletesebben

Matematikai geodéziai számítások 10.

Matematikai geodéziai számítások 10. Matematikai geodéziai számítások 10. Hibaellipszis, talpponti görbe és közepes ponthiba Dr. Bácsatyai, László Matematikai geodéziai számítások 10.: Hibaellipszis, talpponti görbe és Dr. Bácsatyai, László

Részletesebben

NULLADIK MATEMATIKA ZÁRTHELYI

NULLADIK MATEMATIKA ZÁRTHELYI A NULLADIK MATEMATIKA ZÁRTHELYI 20-09-2 Terem: Munkaidő: 0 perc. A dolgozat megírásához íróeszközön kívül semmilyen segédeszköz nem használható! Csak és kizárólag tollal tölthető ki a feladatlap, a ceruzával

Részletesebben

Geoshop fejlesztése a FÖMI-nél

Geoshop fejlesztése a FÖMI-nél Geoshop fejlesztése a FÖMI-nél Szolgáltató Igazgatóság Földmérési és Távérzékelési Intézet www.fomi.hu www.geoshop.hu takacs.krisztian@fomi.hu Budapest, 2014. június 12. Mi az a Geoshop? INSPIRE = térinformatikai

Részletesebben