1. Vyhodnocovanie polohy agenta
Výpočet polohy agenta prebieha v triede AgentPositionCalculator. Výpočet polohy pozostáva z nasledujúcich krokov:
-
-
-
-
-
Výpočet polohy agenta
Aktualizácia polohy
-
2. Vyhodnotenie polohy na základe jednej čiary
Z posledných 10-tich polôh sa vyhodnotí, v ktorej časti ihriska sa agent nachádza. Pri vyhodnotení sa ignoruje stredový kruh (t.j. uvažujú sa iba časti 1-4). Vyhodnotenie časti prebieha hlasovaním – každý záznam má vplyv na určenie podľa typu, akým bola daná poloha vyhodnotená. Celkové skóre pre danú časť ihriska je súčet typov vyhodnotení polohy agenta pre danú časť ihriska.
Identifikujú sa koncové body čiary – ktorý bod je naľavo (phi je väčšie) a ktorý bod je napravo (phi je menšie) od agenta.
Oba koncové body čiary sa otočia v závislosti od aktuálneho natočenia agenta.
Ak je rozdiel medzi y-ovými súradnicami bodov po natočení väčší ako rozdiel medzi x-ovými – agent vidí horizontálnu čiaru (pohľad zhora na ihrisko, pričom bránky sú na ľavej a pravej strane)
Inak vidí vertikálnu čiaru
Na základe predchádzajúcich pravidiel, súradníc bodov a časti ihriska, kde sa pravdepodobne nachádza, sa vytvorí čiara, kde by sa mohol agent nachádzať.
Od poslednej známej polohy (posledný záznam v histórii) sa vytvorí kružnica s polomerom rovným accDistance z poslednej položky v histórii.
Výpočet priesečníka kružnice s úsečkou.
Ak je jeden priesečník – nastaví sa daný bod ako miesto, kde sa nachádza agent
Inak sa vytvorí nová čiara z posledných dvoch záznamov v histórii. Vypočíta sa priesečník tejto čiary a čiary, kde by sa agent mohol nachádzať.
Ak neexistoval priesečník s kružnicou – priesečník dvoch čiar sa nastaví ako poloha, kde by sa mal agent nachádzať
Inak sa nastaví priesečník kružnice, ktorý je bližšie k priesečníku dvoch čiar
3. Mapovanie čiar
Cieľom mapovania čiar je vytvoriť dvojicu: Relatívna_pozícia_bodu, Absolútna_pozícia_bodu (MappedPoint). Alebo inak povedané, pre relatívne súradnice bodov čiar (prijaté zo servera), na základe vlastností čiar a histórie, určiť reálnu polohu týchto bodov na ihrisku.
3.1. Agent vidí aj kontrolny bod
Mapovanie čiar ak agent vidí jeden kontrolný bod prebieha vo funkcii oneFixedObjectSeen(ParsedData)
3.1.1. Vlajky
Ak agent vidí vlajku, pravdepodobne vidí aj ďalšie (minimálne) dve čiary.
Zistenie či čiara, ktorú agent vidí ma spoločný bod z vlajkou (vzor čiar „čiara a bod“) Informácia o tom že daná čiara má spoločný bod nepostačuje na určenie o ktorú čiaru sa jedná (môžu byť dve).
Ak agent vidí F1R – „horizontálnu čiaru“, vidí druhý bod čiary pod väčším uhlom theta (theta 1) ako „vertikálnu čiaru“ (theta 2).
Uhly theta1 a theta2 sú theta uhly ku koncovým bodom čiary.
- Ak agent vidí F1R a theta1 > theta2, potom bod, ktorý agent vidí pod uhlom theta1, je bodom z „horizontálnej čiary“ a theta2 je bodom z vertikálnej čiary.
- Ak agent vidí F2R a theta1 > theta2, potom bod, ktorý agent vidí pod uhlom theta1, je bodom z „vertikálnej čiary“ a theta2 je bodom z „horizontálnej čiary“.
- Ak agent vidí F1L a theta1 > theta2, potom bod, ktorý agent vidí pod uhlom theta1, je bodom z „vertikálnej čiary“ a theta2 je bodom z „horizontálnej čiary“.
- Ak agent vidí F2L a theta1 > theta2, potom bod, ktorý agent vidí pod uhlom theta1, je bodom z „horizontálnej čiary“ a theta2 je bodom z „vertikálnej čiary“.
Výpočet dĺžky videnej časti čiary.
Odpočítanie/pripočítanie dĺžky čiary k súradnici kontrolného bodu v závislosti od čiary a vlajky.
3.1.2. Bránky
Zistenie, či čiara, ktorú agent vidí, je koncová „vertikálna čiara“ ihriska.
Výpočet vzdialeností od priemetu bodu ku koncom čiary, ktoré vidí agent.
Výpočet absolútnych súradníc bodov – pripočítanie / odpočítanie vzdialenosti od y-ovej súradnice bránkového bodu v závislosti od uhla, pod akým agent vidí daný bod.
3.2. Agent vidí iba čiary
Mapovanie čiar, ak agent vidí iba čiary prebieha vo funkcii onlyLinesSeen(ParsedData)
(ešte neimplementované)
sk.fiit.jim.agent.models.AgentPositionCalculator.MappedPoint
Typ: private static
Premenné:
Vector3D absolute
Vector3D relative
Trieda uchováva informácie o namapovaných bodoch - tj, relatívnu polohu bodu (ako ho agent vidí) a absolútnu polohu bodu (kde na ihrisku sa daný bod nachádza)