math - 如何计算发射角度和发射航向以在移动时射入目标?
问题描述
我正在尝试找到发射角度和发射航向,以达到轨迹末端的特定点。然而,挑战在于射手正在沿场地平移。因此,存在影响轨迹并将其弯曲到第三维的动量。同样,我需要计算与地平线和发射航向相比的发射角度以抵消动量。
解决方案
我假设射手根据一些轨迹方程移动
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
如果你重写子弹击中目标的向量化方程,你会得到以下未知变量的四次方程组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
如果你用前三个方程来表达变量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
。求解后,您会找到一个正根,您可以将其代入前三个方程中以计算单位向量的坐标u
。
推荐阅读
- javascript - 在 Javascript 中提取 JSON 数据
- amazon-web-services - 如果增加给定 dynamoDB-geo 数据库的 hashKey 长度,dynamoDB 读/写的成本会增加吗?
- python - 列出日期时间和字符串到字符串
- delphi - delphi 如何根据 captureconsoleoutput 过程准确更新进度条
- xamarin - 如何在 Xamarin Forms iOS 应用程序中使用 Xamarin UITest 读取单选按钮的状态
- c# - Xamarin (C#):iOS 13+:状态栏:触摸/点击检测
- python - 为什么我不能从 Pydantic 导入 BaseModel?
- express - Express Validator - 只允许字母、数字和一些特殊字符
- linux - 如何修复内核模块中的“未知符号 usb_create_hcd (err -2)”(linux-image-cloud-amd64 内核)
- python - Python Flask 抛出 404 URL 未找到