Это может быть легко достигнуто с использованием концепции векторной математики, называемой точечным произведением.
http://en.wikipedia.org/wiki/Dot_product
Это может выглядеть пугающе, но это не так уж и плохо. Это самый правильный способ справиться с проблемой FOV, и прелесть в том, что одна и та же математика работает независимо от того, работаете ли вы с 2D или 3D (именно тогда вы знаете, что решение верное).
(ПРИМЕЧАНИЕ. Если что-то не понятно, просто спросите в разделе комментариев, и я заполню недостающие ссылки.)
Шаги:
1) Вам нужны два вектора, один из которых является вектором курса основного танка. Еще один вектор, который вам нужен, зависит от положения рассматриваемого резервуара и основного резервуара.
Для нашего обсуждения предположим, что вектор курса для основного танка равен (ax, ay), а вектор между позицией основного танка и целевым танком (bx, by). Например, если основной танк находится в точке (20, 30), а целевой танк - в (45, 62), то вектор b = (45 - 20, 62 - 30) = (25, 32).
Опять же, для целей обсуждения предположим, что вектор курса основного танка равен (3,4).
Основная цель здесь - найти угол между этими двумя векторами, и точечное произведение может помочь вам получить это.
2) Точечный продукт определяется как
a * b = | a || b | сов (угол) * * тысяча двадцать-две
читается как (точечное произведение) b, поскольку a и b не являются числами, они являются векторами.
3) или выражается иначе (после некоторой алгебраической манипуляции):
угол = acos ((a * b) / | a || b |)
угол - это угол между двумя векторами a и b, поэтому одна только эта информация может сказать вам, может ли один танк видеть другой или нет.
| | является величиной вектора a, которая согласно теореме Пифагора является просто sqrt (ax * ax + ay * ay), то же самое относится к | b |.
Теперь возникает вопрос, как вы узнаете a * b (точечное произведение b), чтобы найти угол.
4) Здесь приходит спасение. Оказывается, что скалярное произведение также можно выразить так:
a * b = топор * bx + ay * на
То есть угол = acos ((ax * bx + ay * by) / | a || b |)
Если угол меньше половины вашего поля зрения, то рассматриваемый танк виден. В противном случае это не так.
Итак, используя приведенные выше примеры чисел:
На основе наших примеров:
a = (3, 4)
b = (25, 32)
| | = sqrt (3 * 3 + 4 * 4)
| б | = sqrt (25 * 25 + 32 * 32)
угол = acos ((20 * 25 + 30 * 32) / | a || b |
(Обязательно конвертируйте полученный угол в градусы или радианы, прежде чем сравнивать его с вашим значением поля зрения)