Naprendszer szimulációt terveztünk és valósítottunk meg Java nyelven, amit három részből álló blog bejegyzés sorozatban mutatunk be (ez a 3. rész):
- Naprendszer szimuláció 1. rész – elméleti háttér
- Naprendszer szimuláció 2. rész – objektumorientált tervezés
- Naprendszer szimuláció 3. rész – megvalósítás Java nyelven
A Naprendszer szimuláció megvalósítása Java nyelven
Fejlesztőeszközként a Java Swinges projekthez a JDK+JRE aktuális verziót támogató NetBeans IDE-t használtuk. Hibakeresés során, a modell adatainak ellenőrzését és a működés helyességének egyszerű tesztelését, debuggolást konzolra történő szöveges kiírással oldottuk meg. A megvalósítás során az előre megtervezett osztálydiagramok alapján készült el Java nyelven a forráskód. Az MVC modell szerint elkülönített programrészek külön csomagokba kerültek, ezzel is kiemelve a funkciók szerinti szétválasztást – eleget téve a terv követelményeinek.
Részlet a Java forráskódból
Megmutatjuk a Java forráskódnak azt a részét, ami megvalósítja az elméleti háttérnél ismertetett transzformációs mátrix alkalmazását X tengely körüli elforgatásra, a nézőponttól való távolság függvényében az égitest látható méretének kiszámítását, valamint a 3D→2D leképezést.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Point3D forog = new Point3D( b.getPozicio().getX(), b.getPozicio().getY() * Math.cos(forogZ) + b.getPozicio().getZ() * Math.sin(forogZ), -1 * b.getPozicio().getY() * Math.sin(forogZ) + b.getPozicio().getZ() * Math.cos(forogZ)); int egitestMeret = (int)( (AdatInterfesz.MELYSEG * b.getSize()) / (AdatInterfesz.MELYSEG - forog.getZ())); Point2D kepXY = new Point2D( (forog.getX() * AdatInterfesz.MELYSEG / (AdatInterfesz.MELYSEG - forog.getZ()) / size) + origo.getX() - egitestMeret / 2, (forog.getY() * AdatInterfesz.MELYSEG / (AdatInterfesz.MELYSEG - forog.getZ()) / size) + origo.getY() - egitestMeret / 2); |
A teljes és megjegyzésekkel ellátott forráskód ILIAS e-learning tananyagban hozzáférhető, letölthető, tesztelhető tanfolyamaink résztvevői számára.
Az elkészült Java Swinges alkalmazás felhasználói felülete
Tapasztalatok
- A Java nyelv erősen típusos, így a kötelező és sok lebegőpontos/egész átalakítás miatt észrevehető, hogy a legkisebb égitest (Hold) kissé ugrál.
- Az OO szempontból szép Java megvalósítás könnyen módosítható és bővíthető, a funkciók jól csoportosítottak, a felelősségi kör egyértelműen meghatározott.
- A projekt megtervezéséhez és elkészítéséhez magasabb szintű absztrakciós készség szükséges.
- A példaprogram alkalmas a különböző szakterületek, témakörök (matematika – lineáris algebra, fizika, számítógépes grafika, virtuális valóság modellezése) közötti kapcsolatok felismertetésére, megerősítésére, a (legalább részben) egymásra épülések felderítésére.
- A terv átgondolásával, implementálásával gyors, látványos eredmény érhető el, a sikerélmény hamar jelentkezik.
Továbbfejlesztési lehetőségek
- Célszerű ötlet a hardveres gyorsítás és 3D megjelenítés megvalósítása.
- Felkínálható lenne a felhasználó számára több paraméter módosítása.
- Az égitestek lehetnének textúrázhatók is.
- Az égitestek pozíciója kiinduló helyzetben lehetne valós.
- A szimuláció szükség esetén lehetne elindítható, leállítható, újraindítható, gyorsítható, lassítható.
- A terv könnyen implementálható lehet Java3D technológia alkalmazásával, illetve DirectX és/vagy OpenGL támogatással is.
- Az égitestek pozíciója és mozgása demonstrálhatna/modellezhetne nevezetes együttállást is, külön esettanulmányként.
- A program paraméterezhető lehetne konfigurációs fájlból (amelynek formátuma tetszőleges: INI, XML).
- Fejlettebb matematikai modell is alkalmazható lenne.
Forrás
- Friedel, A.; Kaczur, S. (előadó: Friedel, A.): Naprendszer szimuláció a Virtuális valóság modellezése tantárgyban, Informatika Korszerű Technikái Konferencia, Dunaújváros, Dunaújvárosi Főiskola, 2012. november 16-17. (előadás hazai konferencián)
- Friedel, A.; Kaczur, S.: Naprendszer szimuláció a Virtuális valóság modellezése tantárgyban, Cserny, L.; Hadaricsné Dudás, N.; Nagy, B. (szerk): Dunakavics Könyvek 2. – Az Informatika Korszerű Technikái, Dunaújvárosi Főiskola, Új Mandátum Könyvkiadó, 2014, ISBN 978 963 287 069 4, ISSN 2064-3837, p. 72-84 (magyar nyelvű szakcikk)