V prípade simulovaného robotického futbalu sa používajú tzv. Sférické súradnice. Je to system súradníc, ktorý sa skladá z troch komponentov:
Obr. 1: Ilustrácia sveta pomocou sférických súradníc
Ako možno vidieť na Obr. 1: Ilustrácia sveta pomocou sférických súradníc, horizontálny uhol označuje o koľko stupňov sa objekt predomnou nachádza vľavo/vpravo (0 = priamo predo mnou) a vertikálny uhol určuje pod akým uhlom je objekt k mojmu perceptoru naklonený (POZOR ! je to uhol pri objekte nie pri perceptore – hlave) Dĺžka úsečky od perceptoru k objektu je označená ako r – vzdialenosť. Jednotlivé delty potom označujú posun objektu voči agentovi v rámci jednotlivých osí.
Správy zo servera o objektoch (hráči, lopta a fixné body) prichádzajú do agenta v sférických súradniciach. Pre prevody sférických súradníc na kartéziánské a naopak slúži trieda Vector3D. Na základe týchto prevodov je možné vypočítať relatívne súradnice objektov pre systém so začiatkom na mieste agenta.
private static Vector3D spherical(double r, double phi, double theta) {
Vector3D vector = new Vector3D();
vector.r = r;
vector.phi = phi;
vector.theta = theta;
vector.theta_deg = toDegrees(theta);
vector.phi_deg = toDegrees(phi);
vector.calculateCartesian();
return vector;
}
Kod 1: Prevod do karteziánskych súradníc
private static Vector3D getPolarCoordinates(SArray message) {
SObject object = message.getOnIndex(0);
if(object != null && object instanceof SString) {
if (((SString) object).getString().equals("pol")) {
// ...
return Vector3D.spherical(r, toRadians(phi), toRadians(theat));
}
}
return null;
}
Kod 2.: Prevod na sférické súradnice
Trieda Vector3D zároveň implementuje operácie spojené s vektormi, ako aj možnosť vytvorenia nového vektora na základe kartezianských alebo sférických súradníc. Pre zvolenú možnosť je následne vykonaný prepočet do druhej sústavy a je vrátený vektor obsahujúci komponenty pre obe sústavy.