Я еще не отмечал этот вопрос.
В настоящее время принят ответ был принят автоматически из-за Bounty Time-LimitWPF: Поиск элемента вдоль пути
Со ссылкой на this programming game я в настоящее время здание.
Как вы можете видеть из приведенной выше ссылки, в настоящее время я создаю игру, в которой пользовательские программируемые роботы сражаются автономно на арене.
Теперь мне нужен способ, чтобы обнаружить, если робот обнаружил еще один робот в определенном угле (в зависимости от того, где турель может столкнуться):
alt text http://img21.imageshack.us/img21/7839/robotdetectionrg5.jpg
Как вы можете видеть из приведенного выше изображения я нарисовал своего рода точку зрения танков, в которых мне теперь нужно подражать в моей игре, чтобы проверить каждую точку в ней, чтобы увидеть, есть ли другой робот.
Боты - это просто холсты, которые постоянно переводятся на Battle Arena (другой холст).
Я знаю заголовок башни (то, как она будет в настоящее время обращена), и с этим мне нужно найти, есть ли какие-либо боты на своем пути (и путь должен быть определен в виде «точки зрения» , изображенный на рисунке выше, в виде красного треугольника. Надеюсь, что изображение упростит то, что я пытаюсь передать.
Я надеюсь, что кто-то может направить меня к тому, что математика участвует в достижении эта проблема.
[UPDATE]
Я пробовал вычисления, которые вы мне сказали, но это не работает должным образом, поскольку, как вы можете видеть из изображения, bot1 не должен видеть Bot2. Вот пример:
alt text http://img12.imageshack.us/img12/7416/examplebattle2.png
В приведенном выше сценарии Bot 1 проверяет, может ли он видеть Bot 2. Вот детали (по Waylon Flinn's answer):
angleOfSight = 0.69813170079773179 //in radians (40 degrees)
orientation = 3.3 //Bot1's current heading (191 degrees)
x1 = 518 //Bot1's Center X
y1 = 277 //Bot1's Center Y
x2 = 276 //Bot2's Center X
y2 = 308 //Bot2's Center Y
cx = x2 - x1 = 276 - 518 = -242
cy = y2 - y1 = 308 - 277 = 31
azimuth = Math.Atan2(cy, cx) = 3.0141873380511295
canHit = (azimuth < orientation + angleOfSight/2) && (azimuth > orientation - angleOfSight/2)
= (3.0141873380511295 < 3.3 + 0.349065850398865895) && (3.0141873380511295 > 3.3 - 0.349065850398865895)
= true
Согласно выше вычислений, Bot1 может видеть Bot2, но, как вы можете видеть из изображения, это невозможно, так как они обращены в разные стороны.
Что я делаю неправильно в приведенных выше расчетах?
Является ли это чисто двумерной проблемой или является вашим рисунком 2D-представление проблемы 3D? – DJClayworth
Нет, это просто 2D-платформа. –
Aw чувак. Это зависит от того, к чему вы относитесь. Для того, чтобы приведенный выше код работал, ориентация должна быть относительно горизонтального вектора (1,0), иначе вы получите результаты, как вы получаете выше. Это просто вопрос добавления или вычитания PI/2 в вашу текущую ориентацию. –