一个关于火炮仰角计算的问题

问题遇到的现象和发生背景

坐标(0,0)处有火炮,目标20000m外,500m高,各参数及公式如图,火炮仰角范围-3.5°到70°,求合适的角度以击中目标

img

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<math.h>
#define g 9.8
#define v0 828
#define m 43.5
#define anglemin -3.5
#define anglemax 70
#define PI 3.1415926535897932384626
#define C 0.2
#define rho 1.3
#define s 0.01815
#define d 0.152
int main()
{
    double x = 20000, y = 500;
    double cx = 0, cy = 0, deltat = 0.001,t=0, angle=-3.5,ax=9,ay=0;
    double fx, fy, vx, vy;    
    for (angle = -3.5; angle <= 70; angle = angle + 0.001)
    {
        //printf("% 5.1f\n", angle);
        vx = v0 * cos(angle / 180 * PI);
        vy = v0 * sin(angle / 180 * PI);
        
        for(t=0; fabs(cx-x)<=1;t = t + deltat)
        {            
            //t = t + deltat;
            fx = 0.5 * C * rho * s * vx * sqrt(vx * vx + vy * vy);
            fy = 0.5 * C * rho * s * vy * sqrt(vx * vx + vy * vy);
            ax = fx / m;
            ay = (fy + m * g) / m;
            vx = vx - ax * deltat;
            vy = vy - ay * deltat;
            cx = cx + vx * deltat;
            cy = cy + vy * deltat;
            //printf("%f,%f\n", cx, cy);
            
        } 
        if (fabs(cy - y) <= 1) printf(" % 5.2f", angle);
        else continue;
        
        
    }
    return 0;
}

运行结果及报错内容

无法运行出结果

我的解答思路和尝试过的方法

思路:for循环遍历所有角度,在每个循环内遍历时间t找到最接近目标点的炮弹位置,然后输出此时的仰角

我想要达到的结果

计算结果

约为24.6

你这内层循环根本不会执行,在外层循环没有任何地方修改这两个值,那么当初始cx-x的绝对值大于1时,内层循环不满足条件,就不会执行。同理,由于内层循环中修改cy值的代码没有执行,自然外层循环也干不了什麽,空转了千万次而已。
for循环条件是否应该是fabs(cx-x) > 1
cx = cx + vx * deltat;
cy = cy + vy * deltat;
图中没有看到这两个等式的公式

https://www.sogou.com/link?url=hedJjaC291OB0PrGj_c3jFPgihqwIJR5FE9b5KuxGQYebXCDWuEZPCbc-iPH6wf8Xjb0Gx0dmKY04MfuIq5xaA..

这玩意不应该是一个固定解么,怎么会被你算成了循环遍历?