{c语言}南京师范大学-考研-第4题

质点在二维平面的运动问题
{c语言}南京师范大学-考研-第4题_第1张图片

#include
#include
#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;
}

你可能感兴趣的:(c语言,算法)