/** * Slúži na výpočet priľahlej strany pravouhlého trojuholníka, pomocou ktérho sa počíta pohyb * lietadla na radarovej obrazovke. * * @param aircraft Lietadlo, pre ktorého pozíciu sa dĺžka počíta. * @param waypoint Bod, na ktorý lietadlo práve smeruje. * @param waypointDirection Smer bodu voči lietadlu. * @return Dĺžka priľahlej strany, ktorá slúži na výpočet novej pozície lietadla. */ private double calculateAdjacentLength( Aircraft aircraft, Waypoint waypoint, NextWaypointDirectionEnum waypointDirection) { switch (waypointDirection) { case NE: case SE: return waypoint.getPixelCoordX() - aircraft.getLatitude(); case NW: case SW: return aircraft.getLatitude() - waypoint.getPixelCoordX(); default: return 0; } }
/** * Získa novú pozíciu Y na radarovej obrazovke podľa aktuálnej pozície lietadla, bodu a smeru, na * ktorom sa nasledujúci bod nachádza. * * @param waypoint Bod, ku ktorému lietadlo smeruje. * @param newOppositeLength Dĺžka novej protiľahlej strany trojuholníka, pomocou ktorého sa dáta * počítajú. * @param waypointDirection Smer, na ktorom sa nachádza bod voči lietadlu. * @return Pozícia na obrazovke, kde sa má lietadlo pohnúť vo vertikálnom smere. */ private double getNewYPosition( Waypoint waypoint, double newOppositeLength, NextWaypointDirectionEnum waypointDirection) { switch (waypointDirection) { case NE: case NW: return waypoint.getPixelCoordY() + newOppositeLength; case SE: case SW: return waypoint.getPixelCoordY() - newOppositeLength; default: return 0; } }
/** * Predá lietadlo po odchode z riadenej oblasti jedného letiska do riadenej oblasti druhého * letiska, kde má určené pristátie. * * @param aircraft Lietadlo, ktoré sa má predať príletovému radaru. */ private synchronized void handOffAircraft(Aircraft aircraft) throws EmptyRouteException, WaypointNotLoadedException { if (!aircraft.getArrAirport().equals(requestedArptIcao.toUpperCase())) { System.out.println("Mažem lietadlo..."); globalGeneratedAircraft.get(threadNumber).remove(aircraft); } for (int i = 0; i < connectedAirports.size(); i++) { Airport airport = connectedAirports.get(i); if (airport.getIcaoCode().equals(aircraft.getArrAirport())) { Waypoint firstSTARWpt = getNextRouteWaypoint(aircraft, AirportRouteTypesEnum.STAR); aircraft.setActualRoute(aircraft.getStarRoute()); if (!aircraft.getArrAirport().equals(requestedArptIcao.toUpperCase())) { aircraft.setLatitude(firstSTARWpt.getPixelCoordX() + (new Random()).nextInt(5)); aircraft.setLongitude(firstSTARWpt.getPixelCoordY() + (new Random()).nextInt(5)); aircraft.getActualRoute().getRoutePoints().remove(firstSTARWpt.getName()); globalGeneratedAircraft.get(i).add(aircraft); } } } }
/** * Kontrola, či už bol zadaný bod na trase lietadla preletený alebo nie. * * @param aircraft Lietadlo, ktorého sa kontrola týka * @param waypoint Bod, ktorého prelet sa sleduje * @param speed Rýchlosť letu, ktorá slúži pre výpočet okolia bodu pre prelet * @param waypointDirection Smer, v ktorom sa bod voči lietadlu nachádza * @return True ak už lietadlo bod preletelo, false inak. */ private boolean checkWaypointPassed( Aircraft aircraft, Waypoint waypoint, double speed, NextWaypointDirectionEnum waypointDirection) { switch (waypointDirection) { case NE: return aircraft.getLatitude() >= waypoint.getPixelCoordX() - (speed * 2) && aircraft.getLongitude() <= waypoint.getPixelCoordY() + (speed * 2); case SE: return aircraft.getLatitude() >= waypoint.getPixelCoordX() - (speed * 2) && aircraft.getLongitude() >= waypoint.getPixelCoordY() - (speed * 2); case SW: return aircraft.getLatitude() <= waypoint.getPixelCoordX() + (speed * 2) && aircraft.getLongitude() >= waypoint.getPixelCoordY() - (speed * 2); case NW: return aircraft.getLatitude() <= waypoint.getPixelCoordX() + (speed * 2) && aircraft.getLongitude() <= waypoint.getPixelCoordY() + (speed * 2); default: return false; } }
/** * Zistenie, na ktorej svetovej strane voči aktuálnej pozícií lietadla sa nachádza nasledujúci bod * na jeho trase. * * @param acft Lietadlo, pre ktoré sa má údaj zistiť. * @param waypoint Bod, na ktorý lietadlo bude smerovať. * @return Svetová strana, na ktorej sa ďalší bod na trase nachádza. * @see NextWaypointDirectionEnum */ private NextWaypointDirectionEnum getNextWaypointDirection(Aircraft acft, Waypoint waypoint) { if (acft.getLatitude() < waypoint.getPixelCoordX() && acft.getLongitude() > waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.NE; } else if (acft.getLatitude() < waypoint.getPixelCoordX() && acft.getLongitude() == waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.E; } else if (acft.getLatitude() < waypoint.getPixelCoordX() && acft.getLongitude() < waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.SE; } else if (acft.getLatitude() == waypoint.getPixelCoordX() && acft.getLongitude() < waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.S; } else if (acft.getLatitude() > waypoint.getPixelCoordX() && acft.getLongitude() < waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.SW; } else if (acft.getLatitude() > waypoint.getPixelCoordX() && acft.getLongitude() == waypoint.getPixelCoordY()) { return NextWaypointDirectionEnum.W; } else { return NextWaypointDirectionEnum.NW; } }