2015-12-08 2 views

ответ

0

Возьмите вектор от вашего агента до цели (tx - ax, ty - ay) и найдите его ориентацию (обычно atan2(ty - ay, tx - ax), но вы не указали, см. [1]). Затем сравните две ориентации.

Если у вас есть облицовочную направление вашего игрока (который вы можете также вычислить из ориентации [1]), вы можете использовать продукт многоточия:

c := dot(dir, normalized(t - a)) 

пусть a будет позиция вашего агента и t позиция вашей цели, то c - это косинус внутреннего угла между ними.

[1] Если ваша ориентация ориентирована против часовой стрелки, а ось x ориентирована в 0, то направление в обратном направлении будет dir := (cos(angle), sin(angle)).

0

Вам нужен количественный критерий для определения «взгляда» или нет. Его можно выразить в терминах угла (менее 5 ° с обеих сторон) или расстояния (менее 50 см с обеих сторон).

В первом случае вычислите относительную ориентацию агента и точки (по atan2 (δy, δx)) и возьмите разницу. Во втором случае умножьте расстояние между агентом и точкой на касательную к разности углов.

Остерегайтесь того, что разница должна быть рассчитана по модулю 360 °, а отклонения более 90 ° должны быть отклонены. Также обязательно используйте радианы/градусы последовательно.

 Смежные вопросы

  • Нет связанных вопросов^_^