gpt4 book ai didi

计算二维加速对象的截距

转载 作者:行者123 更新时间:2023-12-01 12:30:56 26 4
gpt4 key购买 nike

我正在制作一个模拟爱国者导弹系统的 C 程序。在此模拟中,我的爱国者导弹必须拦截来袭的敌方目标导弹。关于爱国者导弹和敌方目标的信息存储在这样的结构中:

typedef struct _stat {
float32_t x;
float32_t y;
float32_t v; // speed magnitude
float32_t v_theta; // speed angle in radians
float32_t a; // acceleration magnitude
float32_t a_theta; // acceleration angle in radians
} stat;

我将信息存储在两个全局变量中,如下所示:

stat t_stat;  // target stats
stat p_stat; // patriot stats

现在,为了简化问题,目标由于初始速度而移动并且仅受重力影响,因此我们可以考虑:

t_stat.x = TARGET_X0;
t_stat.y = TARGET_Y0;
t_stat.v = TARGET_V0;
t_stat.v_theta = TARGET_V_THETA0;
t_stat.a = G; // gravity acceleration
t_stat.a_theta = -(PI / 2);

再次,为了简化,我还考虑计算爱国者达到最高速度时的碰撞点,因此它自身的加速度仅用于平衡重力加速度。特别是我们有:

p_stat.x = PATRIOT_X0;
p_stat.y = PATRIOT_Y0;
p_stat.v = 1701,45; // Mach 5 speed in m/s
p_stat.v_theta = ???? // that's what I need to find
p_stat.a = G; // gravity acceleration
p_stat.a_theta = PI / 2;

通过这种方式,我们可以认为爱国者号以恒定速度移动,因为受影响的加速度总和等于 0。

float32_t patr_ax = p_stat.a * cos(p_stat.a_theta);       // = 0
float32_t patr_ay = p_stat.a * sin(p_stat.a_theta) - G; // = 0

现在,问题来了。我想编写一个函数来计算正确的 p_stat.v_theta 以便击中目标(如果可能发生碰撞)。

例如,我需要的函数可以有这样一个原型(prototype):

uint8_t computeIntercept(stat t, stat p, float32_t *theta);

它可以这样使用:

if(computeIntercept(t_stat, p_stat, &p_stat.v_theta)) {
printf("Target Hit with an angle of %.2f\n", p_stat.v_theta);
} else {
printf("Target Missed!\n");
}

为了让它更清晰,这是我想要的图像 enter image description here

最佳答案

你的目标弹丸以恒定加速度运动,因此速度可以描述为

enter image description here

现在对这个方程进行积分得到位置方程。

enter image description here

现在通过知道初始位置,我们可以确定这个常量 vector 就是初始位置

enter image description here

现在目标弹丸的位置终于到了

enter image description here

这是两个方程(用于 x 和 y 坐标)。 y 的方程是二次方程,x 的方程是线性的,因为加速度(重力)在垂直方向。

你有

enter image description here

enter image description here

通常你应该这样做:

enter image description here

您可以使用 https://en.wikipedia.org/wiki/Newton%27s_method为了解决您得到的 theta 的最后一个方程。

关于计算二维加速对象的截距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34369679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com