zgerbiak,
na orčenie smeru, či sa máš otáčať za cieľom doprava alebo doľava, vôbec nepotrebuješ počítať uhly. Stačí ti určiť, či je cieľ naľavo alebo napravo. To zistíš vektorovým súčinom vektora tvojej orientácie a relatívneho vektora cieľa (keďže potrebuješ rotáciu len v osi Z, budem rátať len dvojrozmerne v osiach X a Y):
vektor tvojej orientácie naplníš z matice orientácie o získanej metódou getOrientation() takto:
Kód:
o = obj.getOrientation()
myOrient = [o[0][0], o[1][0]]
vektor relatívnej pozície získaš zo svojej pozície a z pozície cieľa:
Kód:
mojPos = obj.getPosition()
cielPos = ciel.getPosition()
relPos = [cielPos[0] - mojPos[0], cielPos[1] - mojPos[1]]
vektorovým súčinom zistíš, či je cieľ napravo alebo naľavo od teba, ak napravo, je súčin záporný, ak naľavo, je kladný, ak je pred tebou (alebo za tebou), je nulový. Odlíšenie vpredu a vzadu sa dá určiť skalárnym súčinom vektorov (kladný vpredu, záporný vzadu):
Kód:
vectSuc = myOrient[0] * relPos[1] - myOrient[1] * relPos[0]
skalSuc = myOrient[0] * relPos[0] + myOrient[1] * relPos[1]
Hodnoty týchto súčinov ti zároveň dajú informáciu o veľkosti odchýlky od cieľa.
Ak by si to chcel robiť cez uhly, ani tak to nie je problém - v module math existuje funkcia atan2(y, x), kde dáš priamo súradnice z myOrient a relPos (pozor, poradie parametrov je obrátené - teda math.atan2(myOrient[1], myOrient[0]) ) a získaš ich uhly v radiánoch.