Как рассчитать угол пуска и направление пуска для попадания в цель во время движения? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь найти угол запуска и направление запуска, чтобы попасть в определенную c точку в конце траектории. Однако проблема в том, что стрелок перемещается по полю. Следовательно, есть импульс, который влияет на траекторию и изгибает ее в 3-е измерение. Опять же, мне нужно рассчитать угол запуска по сравнению с горизонтом и курсом запуска, чтобы противостоять импульсу.

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

Я предполагаю, что стрелок движется согласно некоторым уравнениям траектории

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.

0 голосов
/ 16 июня 2020

Хотя это не вопрос программирования, позвольте мне вам его объяснить. Чтобы рассчитать движение снаряда в 2D, мы обычно разбиваем вектор скорости на две составляющие v x и v z и угол запуска θ xz . Чтобы реализовать это в 3D, вам просто нужно проделать то же самое в 3D, т.е. вам нужно будет разложить вектор скорости на три компонента v x , v y и v z вместе с углами запуска в двух направлениях θ xz и θ yz , а также угол θ xy . После этого вы можете применить свои обычные уравнения движения, чтобы получить правильное решение. Теперь остаётся получить скорость. Это можно сделать, рассматривая систему отсчета и векторы относительной скорости. Сделайте эти две вещи, и, на мой взгляд, вы получите свой ответ.

...