#python #разработка_игр
Кратко опишу проблему. Есть поле (плоскость, по которой в любых направлениях двигаются объекты), герой (он передвигается по полю в соответствием нажатия игроком клавиш) и бот (он должен стоять на месте и стрелять в героя). У героя нам известны: координаты (x, y) и скорость движения (она постоянная). У бота нам известны: координаты (x, y) и скорость его пули. Задача состоит в том, чтобы научить бота стрелять на опережение. То есть, я могу заставить бота стрелять в какую-то точку (могу привести код, если нужно); но в случае, если эта точка двигается, вероятность попасть в нее очень мала. Для удобства приведу входные и выходные данные: ВХОДНЫЕ ДАННЫЕ: скорость движения пули и героя, текущие координаты героя, координаты бота. ВЫХОДНЫЕ ДАННЫЕ: направление(от 0 до 360 градусов), в котором должна полететь пуля бота (разумеется, начальный xy пули совпадает с xy бота); ИЛИ координаты того места, куда должен целиться бот, чтобы попасть в героя Мне нужна формула по входным данным (код на python).
Ответы
Ответ 1
Можно решать систему уравнений относительно неизвестных t и f hx0 + hvx * t = bx0 + bv * cos(f) * t hy0 + hvy * t = by0 + bv * sin(f) * t hx0 - x-координата героя hvx - x-компонент скорости героя bx0 - x-координата пушки bv - значение скорости пули t - время f - угол пушки Maple подсказывает, что можно найти t как корень квадратного уравнения (hvy^2+hvx^2-bv^2) * t^2 + (2*hvy*hy0+2*hx0*hvx-2*by0*hvy-2*hvx*bx0) * t + (hy0^2+by0^2-2*hy0*by0+bx0^2-2*hx0*bx0+hx0^2) = 0 и подставить его для нахождения угла. Подставив t в первое уравнение, найдём косинус, а из второго - синус, из их комбинации уже вычислим угол f = atan2(sin(f), cos(f)) (Если использовать, например, только косинус и взять арккосинус - то получим результат с точностью до знака)
Комментариев нет:
Отправить комментарий