POSEIDON NAVIGATION PROJECT



Hasonló dokumentumok
Java és web programozás

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

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

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Objektumorientált programozás C# nyelven

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

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

Osztályok. 4. gyakorlat

Programozási nyelvek Java

3. Gyakorlat Ismerkedés a Java nyelvvel

Számítógépes grafika

1. Alapok. Programozás II

3. Osztályok II. Programozás II

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

3D-s technológiák a játékfejlesztésben UDK bevezetés

OOP #14 (referencia-elv)

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

C#, OOP. Osztályok tervezése C#-ban

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Java II. I A Java programozási nyelv alapelemei

Származtatási mechanizmus a C++ nyelvben

C++ programozási nyelv Konstruktorok-destruktorok

Java és web programozás

Pénzügyi algoritmusok

Érdekes informatika feladatok

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Apple Swift kurzus 3. gyakorlat

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Alprogramok, paraméterátadás

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Generikus Típusok, Kollekciók

Kalapácsvetés 2016 szöveges

Java II. I A Java programozási nyelv alapelemei

Informatika terméktervezőknek

GPS mérési jegyz könyv

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

A C programozási nyelv III. Pointerek és tömbök.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás 5. Dr. Iványi Péter

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

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

A C programozási nyelv I. Bevezetés

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

Web-technológia PHP-vel

A C programozási nyelv I. Bevezetés

Programozási nyelvek II.: JAVA

1.1 Szakdolgozat témája A Program célja A használt technológiák ismertetése A program megtervezése...

A C programozási nyelv III. Pointerek és tömbök.

500. AA Megoldó Alfréd AA 500.

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

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

Programozási nyelvek Java

Powershell 2. gyakorlat

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Pénzügyi algoritmusok

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

GráfRajz fejlesztői dokumentáció

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java és web programozás

OOP: Java 4.Gy: Java osztályok

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Programozás II. labor

Osztály és objektum fogalma

INFORMATIKAI ALAPISMERETEK

Programozási nyelvek II.: JAVA, 3. gyakorlat

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 15. Széchenyi István Egyetem, Gy r

Programozási nyelvek Java

Java és web programozás

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

OOP: Java 8.Gy: Abstract osztályok, interfészek

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Felhasználó által definiált adattípus

Szoftvertechnolo gia 7. gyakorlat

Java és web programozás

Bevezetés a programozásba Előadás: A const

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Robotika. Kinematika. Magyar Attila

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

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

2018, Funkcionális programozás

Programozas 1. Strukturak, mutatok

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

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Access adatbázis elérése OLE DB-n keresztül

Tárgy. Forgóasztal. Lézer. Kamera 3D REKONSTRUKCIÓ LÉZERES LETAPOGATÁSSAL

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

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Objektumorientált programozás C# nyelven

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

Java programozási nyelv 4. rész Osztályok II.

Átírás:

Mellékletek POSEIDON NAVIGATION PROJECT intelligent Map with Rules of Traffic Készítette: BED K DÁVID & SZIRBIK FERENC KONZULENSEK: VÁMOSSY ZOLTÁN (DOCENS) & MOLNÁR ANDRÁS (ADJUNKTUS) 2004. november 8. BMF-NIK IAR Budapesti M szaki F iskola Neumann János Informatikai F iskolai Kar Informatikai és Automatizált Rendszerek szakirány

TARTALOMJEGYZÉK TARTALOMJEGYZÉK...2 A MELLÉKLET: ANGOL-MAGYAR SZAKSZÓTÁR...3 B MELLÉKLET: µ-blox MS1E GPS VEV MODUL...4 M szaki paraméterei, fizikai specifikáció...4 C MELLÉKLET: GRAPHS AND SPANNING TREES...5 01 Képerny kép indítás után...5 02 Új gráf létrehozása...5 03 Új elem hozzáadása a gráf-pontok illetve a súlyvektor listájába...6 04 Az Elso gráf létrehozás után...6 05 Megjelenítési beállítások...7 06 Globális konstansok és változók...7 07 Új gráf pont hozzáadása...8 08 (X;Y) sík megadása...8 09 Új él hozzáadása...9 10 Gráf pont kiválasztása...9 11 Él kiválasztása... 10 12 Gráf tulajdonságai... 10 13 Aktuális súly beállítása... 11 14 Statikus kapcsolatmátrix generálása... 11 15 Kapcsolatmátrix... 12 16 Útkeresés Dijksra algoritmusa alapján... 12 17 Egy gráf a kijelölt legrövidebb úttal A és C pont között... 13 D MELLÉKLET: GRAPHS AND SPANNING TREES FEJLESZT I DOKUMENTÁCIÓ... 14 01 TObject3D osztály... 14 A konstansok... 14 Típusok... 14 Változók... 15 Az osztály... 15 02 A TGraph osztály... 17 A konstansok... 17 A változók... 17 A típusok... 17 Az osztály... 19 03 A TypeUnit további részei... 19 További típusok... 19 További eljárások illetve függvények... 20 04 A TGraph osztály Draw() metódusa... 20 E MELLÉKLET C# OSZTÁLYLEÍRÁSOK A PPC FEJLESZTÉSB L:... 24 38/2.

POSEIDON NAVIGATION PROJECT IAR SZAKSZÓTÁR A MELLÉKLET: ANGOL-MAGYAR SZAKSZÓTÁR Magyar szó/kifejezés útkeresés kiinduló pont cél elkerülend (objektumok) elkerülend ellenségek költségek minimalizálása objektum elkezd mozogni csapda csúcs feszít fa Angol szó/kifejezés pathfinding starting point goal avoiding obstacles avoiding enemies minimizing costs object begins to move trap vertex spanning tree 38/3.

B MELLÉKLET: µ-blox MS1E GPS VEV MODUL M szaki paraméterei, fizikai specifikáció 38/4.

C MELLÉKLET: GRAPHS AND SPANNING TREES 01 Képerny kép indítás után 02 Új gráf létrehozása 38/5.

03 Új elem hozzáadása a gráf-pontok illetve a súlyvektor listájába 04 Az Elso gráf létrehozás után 38/6.

05 Megjelenítési beállítások 06 Globális konstansok és változók 38/7.

07 Új gráf pont hozzáadása 08 (X;Y) sík megadása 38/8.

09 Új él hozzáadása 10 Gráf pont kiválasztása 38/9.

11 Él kiválasztása 12 Gráf tulajdonságai 38/10.

13 Aktuális súly beállítása 14 Statikus kapcsolatmátrix generálása 38/11.

15 Kapcsolatmátrix 16 Útkeresés Dijksra algoritmusa alapján 38/12.

17 Egy gráf a kijelölt legrövidebb úttal A és C pont között 38/13.

D MELLÉKLET: GRAPHS AND SPANNING TREES FEJLESZT I DOKUMENTÁCIÓ 01 TObject3D osztály A konstansok CONST MAXPOINTS = 500; MAXEDGES = 1000; MAXARMS = 3; ACCURACY = 0.001; A MAXPOINTS határozza meg, hogy maximálisan mennyi grafikai pont lehet az ábrán. A program ezen része is teljesen statikus m ködésre van felkészítve, a kés bbi programverziók legfontosabb lépése a dinamikus tárolás megvalósítása lesz. A MAXEDGES értelemszer en a maximálisan ábrázolható grafikai élek számát jelenti (már többször említettem, hogy a grafikai élek és pontok száma nem egyezik meg a gráf éleinek és pontjainak számával). A MAXARMS egy bels konstans, mely korlátozásával (3 a legkisebb értéke) a TObject3D osztály egy lényeges funkcióját elérhetetlenné tesszük. Képes lenne az osztály több elem tárolására (mindegyiket külön lokális koordinátarendszerben), és ezen elemeket egy osztálypéldány tagjaiként egymáshoz képest mozgatni, forgatni tudnánk. EZ a MAXARMS határozza meg, hogy mennyi ilyen elem tárolható egy példányban. Az 1. elem nem tényleges elem, itt nem tárolhatunk adatot. Ez a bázis koordinátarendszert határozza meg. A 2.-ban tároljuk a tárgyainkat, és ennek biztonságos kezeléséhez (mutatók elérik még a következ elemet is) szükséges még egy elem. Ezért 3 az értéke minimálisan a MAXARMS-nak. Az ACCURANCY egy pontosság érték. Két valós számot az osztály már egyenl nek tekint, ha ezen értéknél kisebb a különbség közöttük. Típusok TYPE (*** T3DObjects ***) TTrans = Array [1..4,1..4] Of Double; TVector3D = Array [1..3] Of Double; TPoint4D = Array [1..4] Of Double; TCoords = Array [1..3] Of TPoint4D; TPoints = Array [1..MAXPOINTS] Of TPoint4D; TPointsColor = Array [1..MAXPOINTS,1..3] Of Byte; TPointsLabel = Array [1..MAXPOINTS,1..2] Of ShortString; TEdges = Array [1..MAXEDGES,1..5] Of Integer; TMatrix3x3 = Array [1..3] Of TVector3D; TData = Record Active : Boolean; Prev : Byte; Next : Byte; Coords : TCoords; Offset : TVector3D; PointsDB : Integer; Points : TPoints; EdgesDB : Integer; Edges : TEdges; ResultPoints : TPoints; 38/14.

PointsLabel : TPointsLabel; PointsColor : TPointsColor; TDataArray = Array [1..MAXARMS] Of TData; A TTrans mátrix tartalmazza a transzformációs m veleteket (forgatás, eltolás, stb.). A TVector3D egy 3D-s vektor avagy egy pont tárolására alkalmas. A TPoint4D ehhez hasonlósan a homogén koordinátás alakban képes ugyanerre. A TCoords a koordinátatengelyek homogén koordinátás alakjait tárolja. A TPoints tömbben találhatók a grafikus pontok, a TEdges tömbben pedig a grafikus élek adatai. A TPointsColor minden pontra tárolja a színét, a TPointsLabel pedig egy feliratot, mely szintén megjelenhet, ha a beállítások ezt engedik. A TMatrix3x3 egy 3D-s környezetben tárolt mátrix. A TDataArray tárolja az egyes elemek (amib l a Graphs and spanning trees csak ténylegesen egyet használ) adatait. Változók VAR TextFont : TFont; BACKGROUND : TColor; DefaultColor : TColor; TEXTOVERWRITE : Boolean; VISI_SERIALOFPOINTS : Boolean; VISI_NAMEOFPOINTS : Boolean; VISI_SERIALOFEDGES : Boolean; VISI_NAMEOFEDGES : Boolean; VISI_WEIGHT : Boolean; VISI_COLORS : Boolean; VISI_DATUM : Boolean; SerialOfPointsColor : TColor; NameOfPointsColor : TColor; SerialOfEdgesColor : TColor; NameOfEdgesColor : TColor; WeightColor : TColor; DatumColor : TColor; A változók az egyes feliratok láthatóságát, illetve színét állítják be. A TEXTOVERWRITE igaz értéke esetén a feliratok háttere átlátszó lesz. Így bár több információ lesz az ábrán, ám ezek kevésbé leolvasható formában. Az osztály TObject3D = Class (TObject) Data : TDataArray; // Az objektumok adatai OX : Integer; // Origó X koordinátája OY : Integer; // Origó Y koordinátája RotateUgamma : TTrans; // Tetsz leges U tengely körüli forgatás mátrixa (gamma szöggel) u : TPoint4D; // Az u tenngely gamma : Double; // A gamma szög (radián) Act : Byte; // Az aktuális kar. RotXAlpha : TTrans; // Az X tengely körüli forgatás mátrixa RotYAlpha : TTrans; // Az Y tengely körüli forgatás mátrixa RotZAlpha : TTrans; // Az Z tengely körüli forgatás mátrixa alpha : Double; // A X, Y, Z tengely körüli forgatás szöge. PROCEDURE InitObject3D ( KX : Integer; KY : Integer ); PROCEDURE DataInit; PROCEDURE AddArm ( num : Byte; 38/15.

prev : Byte; next : Byte; coords : TCoords; offset : TVector3D ); PROCEDURE AddEdge ( num : Byte; p1 : Integer; p2 : Integer; ColorR : Byte; ColorG : Byte; ColorB : Byte ); PROCEDURE AddPoint ( num : Byte; pointdb : Byte; x : Double; y : Double; z : Double ); PROCEDURE AddPointColor ( num : Byte; pointdb : Byte; R : Byte; G : Byte; B : Byte ); PROCEDURE AddPointWithLabel ( num : Byte; pointdb : Byte; x : Double; y : Double; z : Double; PLabel : ShortString; PLabelType : ShortString ); PROCEDURE DataStart ( num : Byte ); FUNCTION SetVector3D ( x : Double; y : Double; z : Double ) : TVector3D; FUNCTION SetPoint4D ( x : Double; y : Double; z : Double; h : Double ) : TPoint4D; FUNCTION SetCoords ( X : TPoint4D; Y : TPoint4D; Z : TPoint4D ) : TCoords; PROCEDURE InitRotateUgamma ( v : TPoint4D; rad : Double ); PROCEDURE InitRotXAlpha ( rad : Double ); PROCEDURE InitRotYAlpha ( rad : Double ); PROCEDURE InitRotZAlpha ( rad : Double ); FUNCTION SetTrans ( Coords : TCoords; Offset : TVector3D ) : TTrans; FUNCTION SetNegativMatrix ( Matrix : TMatrix3x3 ) : TMatrix3x3; FUNCTION SetInvTrans ( Coords : TCoords; Offset : TVector3D ) : TTrans; FUNCTION SetTransponalt ( TT : TMatrix3x3 ) : TMatrix3x3; FUNCTION Multiplication3x1_3x3 ( Matrix : TMatrix3x3; v : TVector3D ) : TVector3D; FUNCTION Multiplication4x1_4x4Single ( Matrix : TTrans; v : TPoint4D ): TPoint4D; FUNCTION Multiplication4x1_4x4 ( v : TPoints; Matrix : TTrans; PointsDB : Integer ) : TPoints; FUNCTION Multiplication4x1_4x4Coords ( v : TCoords; Matrix : TTrans ) : TCoords; PROCEDURE DrawObject ( ManipulatorImage : TImage; Original : Boolean; PointsOrEdgesDraw : Char ); 38/16.

PROCEDURE MoveManipulator ( ManipulatorImage : TImage; CLRSCR : Boolean; PointsOrEdgesDraw : Char ); FUNCTION GetVectorLength ( A : TVector3D ) : Double; FUNCTION SetNormalVector ( A : TVector3D; B : TVector3D ) : TVector3D; 02 A TGraph osztály A konstansok CONST MAXITEM = 10; MAXGRAPHPOINTS = 50 MAXGRAPHEDGES = 100 MAXSHAPEPOINTS = 20; SHAPELISTFILENAME = 'shapes.lst'; SHAPEDIRECTORY = 'shape/'; SAVEDIRECTORY = 'graphs/'; A MAXITEM határozza meg, hogy statikus esetben egy élen mennyi súly, illetve egy pontban mennyi adat tárolható. A MAXGRAPHPOINTS és a MAXGRAPHEDGES a gráf pontjaira illetve éleire meghatározott statikus korlát. A MAXSHAPEPOINTS meghatározza, hogy egy gráf pont minta 3D-s objektuma maximálisan mennyi grafikai pontból állhat. A SHAPEDIRECTORY és a SAVEDIRECTORY az alapértelmezett könyvtárakat állítja be, míg a SHAPELISTFILENAME a minták listáját tároló file nevét. A változók Var DIRECTIVITYLENGTH : Byte; DIRECTIVITYLENGTH2 : Byte; WayColor : TColor; A gráf irányítottságát grafikailag jelölni többféleképpen lehet. A DIRECTIVITYLENGTH és a DIRECTIVITYLENGTH2 változók lehet vé teszik, hogy hosszabb, illetve nagyobb nyilakat tudjunk megjeleníteni. A WayColor a megtalált út színét határozza meg. A típusok (*** TGraph ***) TRec = Record ItemName : ShortString; ItemType : ShortString; DefaultValue : ShortString; TGraphDataArray = Array [1..MAXITEM] Of ShortString; TGraphWeightsArray = Array [1..MAXITEM] Of ShortString; TPointRec = Record Enable : Boolean; X : Double; Y : Double; Z : Double; Serial : Word; Name : ShortString; AllowName : Boolean; Shape : ShortString; 38/17.

Color : TColor; DataArray : TGraphDataArray; TEdgeRec = Record Enable : Boolean; PointOne : Word; PointTwo : Word; Serial : Word; Name : ShortString; AllowName : Boolean; Color : TColor; Directivity : Byte; WeightsArray : TGraphWeightsArray; IsWay : Boolean; TRecArray = Array [1..MAXITEM] Of TRec; TPointsArray = Array [1..MAXGRAPHPOINTS] Of TPointRec; TEdgesArray = Array [1..MAXGRAPHEDGES] Of TEdgeRec; TRelationMatrix = Array [1..MAXGRAPHPOINTS,1..MAXGRAPHPOINTS] Of Double; TPFRec = Record Length : Double; Prev : Word; Status : Boolean; TPFArray = Array [1..MAXGRAPHPOINTS] Of TPFRec; A TRec rekord tárolja a súlyvektor illetve a pontok adatainak tulajdonságait a gráf tulajdonságai között. A TRecArray vektor tárolja a a TRec típusú elemeket a statikus súlyvektor és gráf pont adatvektor számára. A TGraphDataArray a pontok adatainak statikus vektora szinkronban TRecArray-el. A TGraphWeightsArray a statikus súlyvektor szinkronban TRecArray-el. A TPointRec rekord tárolja egy adott gráf pont tulajdonságait. Az Enable határozza meg, hogy logikailag törölt-e az elem, avagy sem. Az X, Y és Z a koordinátáit határozza meg, a Serial az automatikusan generálódó sorszámát, a Name a nevét, az AllowName ennek a létezését. A Shape az adott grafikai mintát tároló file neve, a Color pedig a gráf pont színe. A DataArray tárolja a TGraphDataArray-el szinkronban a gráf csomópontjaiban tárolt adatokat. A TEdgeRec rekord a gráf éleinek tulajdonságait tárolja. Az Enable itt is a logikai törlöttségre utal, a Serial, Name, AllowName és Color szintén azonos jelentéssel bír, mint a gráf pontjai esetén ezt már láttuk. A PointOne és PointTwo határozza meg az él által összekötött két pont sorszámát. A Directivity ennek függvényében az irányítottságot jelölheti. Ha értéke 0, akkor nincs irányítottság. Irányított gráf esetében ez azt jelenti, hogy oda-vissza út létezik (ezt a kés bbiekben le lehet majd tiltani, mivel el fordulhat olyan probléma, mely során ezt nem célszer alkalmazni, azonban térkép program esetén a kétsávú utat ezzel tudjuk modellezni)! Az IsWay logikai változó igaz értéke esetén az adott él egy korábbi útszámítás során az eredmény része volt. Ilyenkor a színe a saját Color tulajdonsága helyett a WayColor lesz. A TPointsArray és a TEdgesArray tárolják a pontokat és az éleket statikus esetben. A TRelationMatrix a kapcsolatmátrix típusa. A TPFRec és a TPFArray Dijkstra legrövidebb út keres algoritmusához szükséges. TPArray-ben fog keletkezni az eredmény. 38/18.

Az osztály TGraph = Class (TObject) public // kesobbiekben private NameOfGraph : ShortString; Comment : ShortString; StorageType : ShortString; TypeOfGraph : ShortString; MultipleEdges : Boolean; Continuous : Boolean; MultipleWeight : Boolean; DataArray : TRecArray; WeightsArray : TRecArray; DANum : Byte; WANum : Byte; MaxXY : Integer; PointsArray : TPointsArray; PointsNum : Word; ShowPoints : TObject3D; EdgesNum : Word; EdgesArray : TEdgesArray; ShowInfo : TObject3D; CurrentWeight : Integer; CurrentDatum : Integer; RelationMatrix : TRelationMatrix; public PROCEDURE InitGraph; PROCEDURE AddItemRecArray ( Var TRA : TRecArray; Var Num : Byte; ItemName : ShortString; ItemType : ShortString; DefaultValue : ShortString ); PROCEDURE AddPoint ( PointRec : TPointRec ); PROCEDURE DeletePoint ( Serial : Word ); PROCEDURE EditPoint ( PointRec : TPointRec; Serial : Word ); PROCEDURE AddEdge ( EdgeRec : TEdgeRec ); PROCEDURE DeleteEdge ( Serial : Word ); PROCEDURE EditEdge ( EdgeRec : TEdgeRec; Serial : Word ); PROCEDURE Draw ( Image : TImage ); PROCEDURE PathfindingDijkstra ( StartPoint : Word; DestinationPoint : Word; Var PFArray : TPFArray ); PROCEDURE DijkstraNeighbours ( Var PFArray : TPFArray; act : Word ); FUNCTION DijkstraMinimum ( PFArray PROCEDURE InitEdgeWay; FUNCTION SearchEdge ( PointOne : Word; PointTwo : Word ) : TPFArray ) : Word; : Word; 03 A TypeUnit további részei További típusok TPair = Array [1..MAXSHAPEPOINTS,1..2] Of Word; A TPair egy segédtömb, mely a gráf pont minták gráfhoz illesztéséhez szükséges. A probléma, melyet meg kellett oldani, hogy egy TObject3D adatmez it 38/19.

(minta) egy másik TObject3D típusba (a gráfba) kellett átmásolni. Ilyenkor a pontok sorszáma megváltozik, de mivel az élek is a pontok eredeti sorszáma alapján tárolódnak, ezért az éleket párosítani kellett a pontokkal. További eljárások illetve függvények PROCEDURE CopyGraph ( Graph1 : TGraph; Var Graph2 : TGraph ); PROCEDURE LoadShapeList ( Var ListBox : TListBox ); PROCEDURE LoadShape ( Var Shape : TObject3D; FileName : String ); PROCEDURE InitPair ( Var Pair : TPair; Var Num : Byte ); FUNCTION SearchPair ( Pair : TPair; local : Byte ) : Word; PROCEDURE SaveGraphToFile ( FileName : ShortString ); PROCEDURE OpenGraphFromFile ( FileName : ShortString ); 04 A TGraph osztály Draw() metódusa procedure TGraph.Draw( Image : TImage ); Var i : Integer; TF : TextFile; num : Integer; X : Integer; Y : Integer; Z : Integer; numglobal : Word; AidePair : TPair; PairNum : Byte; Line : ShortString; numglobalinfo : Word; SX : Integer; SY : Integer; SZ : Integer; SDiv : Integer; A : TVector3D; B : TVector3D; IV : TVector3D; NV : TVector3D; SColor : TColor; begin ShowPoints.Free; ShowPoints:=TObject3D.Create; ShowPoints.InitObject3D(MaxXY Div 2,MaxXY Div 2); ShowPoints.DataInit; ShowInfo.Free; ShowInfo:=TObject3D.Create; ShowInfo.InitObject3D(MaxXY Div 2,MaxXY Div 2); ShowInfo.DataInit; ShowPoints.AddArm(1,0,2,ShowPoints.SetCoords(ShowPoints.SetPoint4D(1,0,0,1),ShowPoints.SetPoin t4d(0,1,0,1),showpoints.setpoint4d(0,0,1,1)),showpoints.setvector3d(0,0,0)); ShowPoints.AddPoint(1,1,0,0,0); ShowPoints.DataStart(1); ShowPoints.AddArm(2,1,0,ShowPoints.SetCoords(ShowPoints.SetPoint4D(1,0,0,1),ShowPoints.SetPoin t4d(0,1,0,1),showpoints.setpoint4d(0,0,1,1)),showpoints.setvector3d(0,0,10)); ShowInfo.AddArm(1,0,2,ShowInfo.SetCoords(ShowInfo.SetPoint4D(1,0,0,1),ShowInfo.SetPoint4D(0,1, 0,1),ShowInfo.SetPoint4D(0,0,1,1)),ShowInfo.SetVector3D(0,0,0)); ShowInfo.AddPoint(1,1,0,0,0); ShowInfo.DataStart(1); ShowInfo.AddArm(2,1,0,ShowInfo.SetCoords(ShowInfo.SetPoint4D(1,0,0,1),ShowInfo.SetPoint4D(0,1, 0,1),ShowInfo.SetPoint4D(0,0,1,1)),ShowInfo.SetVector3D(0,0,10)); numglobal:=0; 38/20.

numglobalinfo:=0; For i:=1 To (PointsNum) Do Begin If (PointsArray[i].Enable) Then Begin AssignFile(TF,SHAPEDIRECTORY+PointsArray[i].Shape); {$I-} ReSet(TF); {$I+} If (IoResult<>0) Then Begin ShowMessage('There was some error during shape file opening.'); Halt; Line:=''; If (VISI_SERIALOFPOINTS) Then Begin Line:=IntToStr(PointsArray[i].Serial); If (VISI_NAMEOFPOINTS) And (PointsArray[i].AllowName) Then Begin Line:=PointsArray[i].Name; If (VISI_DATUM) And (CurrentDatum<>0) Then Begin Line:=PointsArray[i].DataArray[CurrentDatum]; If (VISI_SERIALOFPOINTS) Or (VISI_NAMEOFPOINTS) Or (VISI_DATUM) Then Begin Inc(numglobalinfo); ShowInfo.AddPointWithLabel(2,numglobalinfo,PointsArray[i].X,PointsArray[i].Y,PointsArray[i].Z, Line,'Point'); ReadLn(TF,Line); ReadLn(TF,num,X,Y,Z); InitPair(AidePair,PairNum); While (Not(EoF(TF))) And (num<>0) Do Begin Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[i].X+X,PointsArray[i].Y+Y,PointsArray[i].Z+Z); Inc(PairNum); AidePair[PairNum,1]:=num; AidePair[PairNum,2]:=numglobal; ReadLn(TF,num,X,Y,Z); While (Not(EoF(TF))) Do Begin ReadLn(TF,X,Y); X:=SearchPair(AidePair,X); Y:=SearchPair(AidePair,Y); ShowPoints.AddEdge(2,X,Y,GetRValue(PointsArray[i].Color),GetGValue(PointsArray[i].Color),GetBV alue(pointsarray[i].color)); Close(TF); For i:=1 To (EdgesNum) Do Begin If (EdgesArray[i].Enable) Then Begin Line:=''; If (VISI_SERIALOFEDGES) Then Begin Line:=IntToStr(EdgesArray[i].Serial); If (VISI_NAMEOFEDGES) And (EdgesArray[i].AllowName) Then Begin Line:=EdgesArray[i].Name; If (VISI_WEIGHT) And (CurrentWeight<>0) Then Begin Line:=EdgesArray[i].WeightsArray[CurrentWeight]; If (VISI_NAMEOFEDGES) Or (VISI_SERIALOFEDGES) Or (VISI_WEIGHT) Then Begin Inc(numglobalinfo); ShowInfo.AddPointWithLabel(2,numglobalinfo, (PointsArray[EdgesArray[i].PointOne].X+PointsArray[EdgesArray[i].PointTwo].X)/2, (PointsArray[EdgesArray[i].PointOne].Y+PointsArray[EdgesArray[i].PointTwo].Y)/2, (PointsArray[EdgesArray[i].PointOne].Z+PointsArray[EdgesArray[i].PointTwo].Z)/2, Line,'Edge'); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointOne].X,PointsArray[EdgesArray[i ].PointOne].Y,PointsArray[EdgesArray[i].PointOne].Z); Inc(numglobal); 38/21.

ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointTwo].X,PointsArray[EdgesArray[i ].PointTwo].Y,PointsArray[EdgesArray[i].PointTwo].Z); If (EdgesArray[i].IsWay) Then Begin SColor:=WayColor; End Else Begin SColor:=EdgesArray[i].Color; ShowPoints.AddEdge(2,numglobal- 1,numglobal,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); If (EdgesArray[i].Directivity=1) Then Begin A:=ShowPoints.SetVector3D(PointsArray[EdgesArray[i].PointOne].X,PointsArray[EdgesArray[i].Poin tone].y,pointsarray[edgesarray[i].pointone].z); B:=ShowPoints.SetVector3D(PointsArray[EdgesArray[i].PointTwo].X,PointsArray[EdgesArray[i].Poin ttwo].y,pointsarray[edgesarray[i].pointtwo].z); IV:=ShowPoints.SetNormalVector(A,B); NV:=ShowPoints.SetVector3D(IV[3],-IV[1],IV[2]); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointOne].X+IV[1]*DirectivityLength+ NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Y+IV[2]*DirectivityLength+NV[2]*D irectivitylength2,pointsarray[edgesarray[i].pointone].z+iv[3]*directivitylength+nv[3]*directiv itylength2); ShowPoints.AddEdge(2,numglobal,numglobal- 2,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointOne].X+IV[1]*DirectivityLength- NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Y+IV[2]*DirectivityLength- NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Z+IV[3]*DirectivityLength- NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 3,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); NV:=ShowPoints.SetVector3D(-IV[2],-IV[3],IV[1]); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointOne].X+IV[1]*DirectivityLength+ NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Y+IV[2]*DirectivityLength+NV[2]*D irectivitylength2,pointsarray[edgesarray[i].pointone].z+iv[3]*directivitylength+nv[3]*directiv itylength2); ShowPoints.AddEdge(2,numglobal,numglobal- 4,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointOne].X+IV[1]*DirectivityLength- NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Y+IV[2]*DirectivityLength- NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointOne].Z+IV[3]*DirectivityLength- NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 5,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal,numglobal- 2,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal-2,numglobal- 1,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal-1,numglobal- 3,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal- 3,numglobal,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); If (EdgesArray[i].Directivity=2) Then Begin A:=ShowPoints.SetVector3D(PointsArray[EdgesArray[i].PointOne].X,PointsArray[EdgesArray[i].Poin tone].y,pointsarray[edgesarray[i].pointone].z); B:=ShowPoints.SetVector3D(PointsArray[EdgesArray[i].PointTwo].X,PointsArray[EdgesArray[i].Poin ttwo].y,pointsarray[edgesarray[i].pointtwo].z); IV:=ShowPoints.SetNormalVector(A,B); NV:=ShowPoints.SetVector3D(IV[3],-IV[1],IV[2]); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointTwo].X- IV[1]*DirectivityLength+NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Y- IV[2]*DirectivityLength+NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Z- IV[3]*DirectivityLength+NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 1,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); 38/22.

Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointTwo].X- IV[1]*DirectivityLength-NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Y- IV[2]*DirectivityLength-NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Z- IV[3]*DirectivityLength-NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 2,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); NV:=ShowPoints.SetVector3D(-IV[2],-IV[3],IV[1]); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointTwo].X- IV[1]*DirectivityLength+NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Y- IV[2]*DirectivityLength+NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Z- IV[3]*DirectivityLength+NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 3,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); Inc(numglobal); ShowPoints.AddPoint(2,numglobal,PointsArray[EdgesArray[i].PointTwo].X- IV[1]*DirectivityLength-NV[1]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Y- IV[2]*DirectivityLength-NV[2]*DirectivityLength2,PointsArray[EdgesArray[i].PointTwo].Z- IV[3]*DirectivityLength-NV[3]*DirectivityLength2); ShowPoints.AddEdge(2,numglobal,numglobal- 4,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal,numglobal- 2,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal-2,numglobal- 1,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal-1,numglobal- 3,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.AddEdge(2,numglobal- 3,numglobal,GetRValue(SColor),GetGValue(SColor),GetBValue(SColor)); ShowPoints.DataStart(2); end; 38/23.

E MELLÉKLET C# OSZTÁLYLEÍRÁSOK A PPC FEJLESZTÉSB L: Az itt látható osztályokon kívül természetesen több lett implementálva, ahogy a példaprogramokban látható, de ezek lényegében csak megjelenítési funkciót látnak el. A tényleges m veletvégzés az alábbi osztályokban megy végbe. A Classes könyvtárban megtalálható mindegyik itt leírt osztály forráskódja, valamint egy osztálykönyvtár PNP.dll néven, amit bármilyen.net-es fejleszt i környezetbe be lehet importálni. Ezek mellet az osztályok leírása is megtalálható HTML formátumban a Classes\CodeCommentReport könyvtárban. PNP.Coord2BMP Osztály Az osztály a megadott hosszúsági, szélességi és egy bitkép megfelel X, Y koordinátái segítségével meghatározza tetsz leges szélességi és hosszúsági értékekb l a hozzájuk tartózó X és Y koordinátákat a bitképen. Hozzáférés: sosztály: Object Tagok Hozzáférés Típus delx dely Long0 Lat0 Coord2BMP Coordinate Coord2BMP getx Tárolja, hogy egy egység (itt pixel), mekkora távolságnak felel meg fokban a hosszúsági tengely mentén. Private double Tárolja, hogy egy egység (itt pixel), mekkora távolságnak felel meg fokban a szélességi tengely mentén. Private double A referencia pont hosszúsági koordinátája. Private double A referencia pont szélességi koordinátája. Private double Az osztály konstruktora. Bemeneti paraméterei a bitképen lév X, Y koordináták és a hozzájuk tartozó Konstruktor hosszúsági és szélességi értékek. Az egy ponthoz tartozó X és Y koordináták, valamint hosszúsági és Struct szélességi értékek. Az osztály konstruktora. Bemeneti paraméterei a bitképen lév X, Y koordináták és a hozzájuk tartozó hosszúsági és szélességi értékek. Az Konstruktor összetartozó értékek a 'Coordinates' sruktúrába lettek elhelyezve. Tetsz leges hosszúsági értékb l megadja a hozzá tartozó X koordinátát Metódus 38/24.

a bitképen. gety Tetsz leges hosszúsági értékb l megadja a hozzá tartozó X koordinátát a bitképen. Metódus PNP.Coord2BMP.Coord2BMP Függvény Az osztály konstruktora. Bemeneti paraméterei a bitképen lév X, Y koordináták és a hozzájuk tartozó hosszúsági és szélességi értékek. void Coord2BMP (int, int, float, float, int, int, float, float, int, int, float, float, int, int, float, float) Típus Név int X0 Az 1. pont X koordinátája a bitképen. int Y0 Az 1. pont Y koordinátája a bitképen. float float lon0 lat0 Az 1. pont hosszúsági koordinátája a bitképen. Az 1. pont szélességi koordinátája a bitképen. int X1 Az 2. pont X koordinátája a bitképen. int Y1 Az 2. pont Y koordinátája a bitképen. float float lon1 lat1 Az 2. pont hosszúsági koordinátája a bitképen. Az 2. pont szélességi koordinátája a bitképen. int X2 Az 3. pont X koordinátája a bitképen. int Y2 Az 3. pont Y koordinátája a bitképen. float float lon2 lat2 Az 3. pont hosszúsági koordinátája a bitképen. Az 3. pont szélességi koordinátája a bitképen. int X3 Az 4. pont X koordinátája a bitképen. int Y3 Az 4. pont Y koordinátája a bitképen. float lon3 Az 4. pont hosszúsági koordinátája a 38/25.

bitképen. float lat3 Az 4. pont szélességi koordinátája a bitképen. void Más túlterhelés: PNP.Coord2BMP. Coord2BMP (Coordinate,Coordinate,Coordinate,Coordinate) PNP.Coord2BMP.Coord2BMP Függvény Az osztály konstruktora. Bemeneti paraméterei a bitképen lév X, Y koordináták és a hozzájuk tartozó hosszúsági és szélességi értékek. Az összetartozó értékek a 'Coordinates' sruktúrába lettek elhelyezve. void Coord2BMP (PNP.Coord2BMP.Coordinate, PNP.Coord2BMP.Coordinate, PNP.Coord2BMP.Coordinate, PNP.Coord2BMP.Coordinate) Típus Név Coordinate c0 Az 1. ponthoz tartozó értékek. Coordinate c1 A 2. ponthoz tartozó értékek. Coordinate c2 A 3. ponthoz tartozó értékek. Coordinate c3 A 4. ponthoz tartozó értékek. void Más túlterhelés: PNP.Coord2BMP.Coord2BMP (2,2,4,4,2,2,4,4,2,2,4,4,2,2,4,4) PNP.Coord2BMP.Coordinate Struktúra Az egy ponthoz tartozó X és Y koordináták, valamint hosszúsági és szélességi értékek. Hozzáférés: Tagok X Y Longitude 38/26.

Latitude PNP.NMEA_decoding Osztály NMEA mondatokat visszafejt osztály. Hozzáférés: sosztály: Object Tagok Hozzáférés Típus _Sentence Tárolja az NMEA mondatot. Protected Sentence Beállítja, vagy visszaadja az String NMEA mondatot. _SentenceLength Tárolja az NMEA mondat Protected Int hosszát. SentenceLength Visszaadja az NMEA mondat Int hosszát. Checksum Az ellen rz kódot tárolja. Protected Byte ChecksumOK Tárolja, hogy az NMEA mondat Protected Bool megfelel-e az ellen rz kódnak. ID Tárolja az NMEA mondat Protected String azonosítóját ($GPxxx). NMEA_decoding Az osztály konstruktora. Konstruktor getchksum Beállítja az osztály 'Checksum' Protected Metódus adattagjának értékét. getchecksum Kiveszi az NMEA mondat Metódus ellen rz kódját (checksum). Megvizsgálja, hogy az NMEA Metódus ischecksumok mondat megfelel-e az ellen rz kódnak. getparam Visszaadja az NMEA mondat Metódus kívánt elemét. getid Visszaadja az NMEA mondat Metódus azonosítóját. PNP.NMEA_decoding.NMEA_decoding Függvény Az osztály konstruktora. void NMEA_decoding () void PNP.NMEA_decoding.getID Függvény Visszaadja az NMEA mondat azonosítóját. 38/27.

getid () Az NMEA mondat azonosítója. PNP.NMEA_decoding.getChksum Függvény Beállítja az osztály 'Checksum' adattagjának értékét. Protected void getchksum () void PNP.NMEA_decoding.getChecksum Függvény Kiveszi az NMEA mondat ellen rz kódját (checksum). getchecksum () Az NMEA mondat ellen rz kódja (Kivétel esetén "ERROR"). PNP.NMEA_decoding.isChecksumOK Függvény Megvizsgálja, hogy az NMEA mondat megfelel-e az ellen rz kódnak. bool ischecksumok () bool Megfelel-e az ellen rz kódnak a mondat (true->igen, false->nem). PNP.NMEA_decoding.getParam Függvény Visszaadja az NMEA mondat kívánt elemét. getparam (byte) Típus Név byte ParamNumber Az adat sorszáma az NMEA mondaton belül. a, a kívánt adat (ha nincs kitöltve, a visszatérési érték üres karakterlánc); b, EOL (End Of Line), ha a beadott érték nagyobb, mint a Mondat elemeinek száma; c, NVS (Not Valid Sentence), ha a tárolt nem NMEA mondat; 38/28.

PNP.NMEA_decoding.getID Függvény Visszaadja az NMEA mondat azonosítóját. getid () Az NMEA mondat azonosítója. PNP.GPGLL_decoding Class Az osztály segítségével a 'GPGLL' típusú NMEA szabványos GPS mondatokból lehet az adatokat lekérni. Szükséges hozzá a PNP.NMEA_decoding osztály, mint sosztály. Hozzáférés: sosztály: NMEA_decoding Tagok Hozzáférés Típus GPGLL_decoding Az osztály konstruktora. Konstruktor _Postponement Az id eltolódás a UTC id höz képest. (pl. Budapesten 02:00 óra, ez az alapbeállítás). Private String Formátum --> hh:mm, h=óra, m=perc. Postponement Visszaadja az id eltolódás mértékét a UTC id höz képest. (pl. Budapesten 02:00 óra, ez az alapbeállítás). String Formátum --> hh:mm, h=óra, m=perc. setpostponement Az id eltolódás mértékének beállítása a UTC id höz képest. (pl. Budapesten 02:00 óra, ez az alapbeállítás). Formátum --> hh:mm, h=óra, m=perc. Kivételek: - epostponementminute : Metódus keletkezik, ha a megadott percérték 0-nál kisebb, vagy 60-nál nagyobb-egyenl. - epostponementhour : keletkezik, ha a megadott óraérték 0-nál kisebb, vagy 24-nél nagyobb-egyenl. epostponementminute Kivétel. Akkor keletkezik, ha Kivétel 38/29.