Úvod
Cieľom tohto dokumentu je nájdenie a následné zanalyzovanie aspektov, ktoré zabezpečujú výpočet polohy, teda orientáciu Jima v ihrisku.
Vypracovanie
Správa o polohe Jima sa skladá z nasledujúcich údajov: poloh lopty, poloha hráča, vypočítanie čiara a následné odoslanie správy do test frameworku.
Orientácia Jima sa odohráva v triede VECTOR3D.
V triede AgentPositionCalculator zisťuje, kde sa agent nachádza.
Na základe rozpoznávania vzorov čiar, Jim vie definovať na čo sa pozerá podľa preddefinovaných vzorov. Jim rozoznáva nasledovné vzory v triede LinePatternRecognition, ktorá poskytuje funkcie na klasifikáciu vzťahov medzi čiarami a bodmi:
V triede sú naimplementované nasledujúce funkcie:
squareDistance (druhá mocnina vzdialenosti medzi bodmi)
isSamePoint (funkcia najskôr vypočíta maximálnu vzdialenosť medzi dvoma bodmi s najhorším možným prípadom (prvý point noise pre oba uhly je +2 a pre druhý je -2. Ak je vzdialenosť medzi dvoma danými bodmi menšia ako najhorší možný prípad, oba body by mohli predstavovať rovnaký bod. Návratová hodnota @return je true, ak oba body môžu byť rovnaké - agent vidí jeden bod s dvoma rôznymi úrovňami).
haveSamePoint (vzor vlajka a čiara)
Táto funkcia používa ako vstupné parametre Vector3D point a ParsedLineWithFlags line.
Úlohou tejto funkcie je zistiť, ktorý z bodov čiary môže byť totožný s bodom predaným ako argument. Funkcia má tri návratové hodnoty 0(ak žiaden bod na čiare nie je totožný), 1 (ak prvý koncový bod riadku a daný bod by mohol predstavovať ten istý bod) a 2(ak druhý koncový bod riadku a daný bod by mohol predstavovať rovnaký bod).
isCorner (vzor roh)
Ako vstupné parametre sú používané ParsedLineWithFlags line1 ParsedLineWithFlags line2. Funkcia zisťuje či tieto parametre predstavujú roh na ihrisku alebo nie.
Ak je uhol menší ako 117° (v polovici medzi 90 a 144), tak sa jedná sa o roh, inak ak je väčší ako 117° jedná sa o časť kruhu.
Z implementácie môžeme vidieť, že funkcia využíva samePoint funkciu, pre určenie návratovej hodonty isCorner funkcie.
areCircleLines (časť kruhu)
Implementácia tejto funkcie je zhodná s getCorner, nakoľko sa jedná len o rozdiel v definovaní kedy sa jedná o časť kruhu. Ak dve čiary majú spoločný koncový bod a zvierajú uhol 144 stupňov, vieme definovať, že sa jedná o kruh, ak je tento uhol väčší ako 117 stupňov, jedná sa o časť kruhu. Tolerancia je 27stupňov.
goalAndLine (či daná čiara je v blízkosti bránky - vypočítava sa na základe bránkovej tyče)
Vstupné parametre sú Vector3D point ParsedLineWithFlags line.
Návratová hodnota je vzdialenosť medzi ortogonálnym projekciou bodu a koncovými bodmi čiary.
vzdialenosti [0] = vzdialenosť medzi prvým bodom trate a ortogonálnym premietnutím bodu na čiare
vzdialenosti [+] = vzdialenosť medzi druhým bodom trate a ortogonálnym premietnutím bodu na čiare
Metóda getQuarter:
Sa nachádza v public class AgentPositionCalculator, ktorá vypočíta aproximáciu aktuálnej pozície agenta.
V metóde getQuarter definujeme rozdelenie ihriska na 5 základných sektorov. Tieto sektory sú nápomocné Jimovi pri jeho orientáci, nakoľko na základe hodnoty súradníc (x,y - záporné alebo kladné) Jim vie rozpoznať v ktorom z piatich základných sektorov sa nachádza.
treba doimplementovať:
isIntersection (funkcia na zistenie či čiary majú spoločný priesečnik: T alebo +)
isT (čiary s priesečníkom T)
isPlus (čiary s priesečníkom +)
isGoalBox (či sú body bránkovisko)
Na základe aktuálneho stavu implementácie vieme zhodnotiť, že Jim sa vie orientovať, vie zistiť v ktorej pätine ihriska sa nachádza, avšak niektoré špecifické orientačné body sú len vo fáze dokumentácie a bude potrebné ich doimplementovať, ako napríklad zistenie či sa jedná o bránkovisko alebo stredovú časť ihriska.