质点在二维平面的运动问题
此题目为南京师范大学考研题目(第4题)
#include<stdio.h>
#include<math.h>
#define g 10//重力加速度
#define K 6//假设的空气阻力和速度平分的比值
#define m 2//质量
#define t 0.1//时间增量dt
int main(void)
{
/*假设方向向上向右为正方向*/
float vx0 = 20,vy0 = 60,x0 = 0,y0 = 400;//初始速度和位置
float vx = vx0,vy = vy0,px = x0,py = y0;
float v,ay,ax;//瞬时速度、瞬时加速度
float q,qx,qy;//瞬时空气阻力
while(py > 0)//若未落到地面
{
v = sqrt(vx * vx + vy * vy);//角度随时都在变化,所以利用勾股定理求合速度
q = K / v * v;//利用合速度求合空气阻力
qx = q * vx / v;//水平方向空气阻力
qy = q * vy / v;//竖直方向空气阻力
/*竖直方向加速度、空气阻力、速度*/
ay = -g - qy / m; //向上运动时,阻力向下,f = -(g+q);向下运动时,阻力向上,f = -g-q;
py += vy * t;//Pt+dt = Pt + vt * dt
vy += ay * t;//Vt+dt = Vt + at * dt
/*水平方向加速度、空气阻力、速度*/
ax = -qx / m;
px += vx * t;
vx += ax * t;
if(py >= 0)//输出每一时间增量的瞬时加速度、速度、位置
printf("av=%.1f ay=%.1f v=%.1f vx=%.1f vy=%.1f x=%.1f y=%.1f\n",ax,ay,v,vx,vy,px,py);
}
return 1;
}