Я предполагаю, что стрелок движется согласно некоторым уравнениям траектории
x(t) = [x[0](t), x[1](t), 0]
в горизонтальной плоскости (поэтому x[3](t) = 0
, потому что траектория всегда находится в плоскости x[1], x[2]
). В момент времени t_0
стрелок находится в точке x_0 = x(t_0)
и имеет скорость
v_0 = v(t_0) = dx/dt(t_0) = [v_0[0], v_0[1], 0]
Я предполагаю, что вы знаете величину скорости w > 0
, с которой пуля выстреливается в момент t_0
и вам нужен вектор направляющего устройства
u = [u[0], u[1], u[2]]
1 = u[0]^2 + u[1]^2 + u[2]^2
, который будет гарантировать, что выстрел поразит неподвижную (я надеюсь) цель, расположенную в точке
x_1 = [x_1[0], x_1[1], x_1[2]]
Таким образом, выстрел будет произведен в время t_0
от точки x_0
, последняя движется со скоростью v_0
, а величина выпущенной пули равна w
. Следовательно, начальная скорость пули относительно системы координат, прикрепленной к земле, равна v_0 + w*u
, где u
- неизвестный единичный вектор. Векторизованные дифференциальные уравнения движения:
dx/dt = v
dv/dt = - g * e_3
, где e_3 = [0, 0, 1]
и g = 9.8
. Решение этих уравнений, которое начинается с x_0
со скоростью v_0 + w*u
в момент времени t_0
, следует по траектории, описываемой векторизованными уравнениями
x(t) = x_0 + (t - t_0) * (v_0 + w*u) - g*(t - t_0)^2 * e_3
Итак, существует еще неизвестный момент времени t_1
, при котором пуля попадает в цель x_1
, т.е.
x_1 = x(t_1) which yields
x_1 = x_0 + (t_1 - t_0) * (v_0 + w*u) - g*(t_1 - t_0)^2 * e_3
Обозначьте
x_10 = x_1 - x_0 (known) i.e.
for (int i=0; i<3; i++){x_12[i] = x_1[i] - x_0[i]}
t_10 = t_1 - t_0 (unknown)
Тогда вы получите
x_10 = t_10 * (v_0 + w*u) - g * (t_10)^2 * e_3
Если переписать векторизованное уравнение попадания пули в цель покомпонентно, вы получите следующую систему четырех квадратичных c уравнений для неизвестных переменных t_10, u[0], u[1], u[2]
:
x_10[0] = t_10 * ( v_0[0] + w*u[0] )
x_10[1] = t_10 * ( v_0[1] + w*u[1] )
x_10[2] = t_10 * w * u[1] - (t_10)^2 * g / 2
1 = u[0]^2 + u[1]^2 + u[2]^2
Если вы express переменные u[0], u[1], u[2]
в члены t_12
из первых трех уравнений, вы получите
u[0] = x_10[0]/(w*t_10) - v[0]/w
u[1] = x_10[1]/(w*t_10) - v[1]/w
u[2] = ( x_10[2] + (t_10)^2 * g / 2 )/(w*t_10)
1 = u[0]^2 + u[1]^2 + u[2]^2
, затем вы можете подставить выражения для u[0], u[1], u[2]
в терминах t_12
в последнее уравнение, и вы получите после умножения обеих частей на (t_10)^2
, полиномиальное уравнение четвертой степени от переменной t_12
. После ее решения вы найдете одно положительное число root, и вы сможете снова включить его в первые три уравнения, чтобы вычислить координаты единичного вектора u
.