c语言实现台球位置计算,台球碰撞 (C语言代码)三角函数、浮点数求绝对值函数...

解题思路:复合运动,将运动分解为水平方向和垂直方向两个分运动,分别求出横坐标和纵坐标。

注意事项:fabs()是用于浮点数求绝对值;三角函数的输入值为弧度制数;π=acos(-1)——反三角函数求pi的值;

参考代码:#include 

#include 

#define pi acos(-1)

typedef struct Result{

double horizon;

double vertical;

}result;

double left_right(int x,double vx,int s,int left_limit, int right_limit)

{

//left_limit<=x<=right_limit

double total=vx*s;

double res=x;

while(fabs(total-0)>=0.0000001)

{

if((res+total)>res&&(res+total)<=right_limit)

{

res=res+total;

total=0;

}

else if((res+total)>right_limit)

{

total=-(total-(right_limit-res));

res=right_limit;

}

if((res+total)<=res&&(res+total)>=left_limit)

{

res=res+total;

total=0;

}

else if((res+total)

{

total=-(res-left_limit+total);

res=left_limit;

}

}

return res;

}

double up_down(int y,double vy,int s,int down_limit, int up_limit)

{

//down_limit<=y<=up_limit

double total=vy*s;

double res=y;

while(fabs(total-0)>=0.0000001)

{

if((res+total)>res&&(res+total)<=up_limit)

{

res=res+total;

total=0;

}

else if((res+total)>up_limit)

{

total=-(total-(up_limit-res));

res=up_limit;

}

if((res+total)<=res&&(res+total)>=down_limit)

{

res=res+total;

total=0;

}

else if((res+total)

{

total=-(res-down_limit+total);

res=down_limit;

}

}

return res;

}

int main()

{

int L,W,x,y,R,a,v,s;

int i=0,j;

result output[25];

//(x,y)圆心坐标,R=半径,a=角度,v=速度,s=时间;

while(i<25&&8==scanf("%d %d %d %d %d %d %d %d",&L,&W,&x,&y,&R,&a,&v,&s))

{

if(L==0&&W==0&&x==0&&y==0&&R==0&&a==0&&v==0&&s==0) break;

double vx=v*cos(a*pi/180),vy=v*sin(a*pi/180);

int left_limit=R,right_limit=L-R;

int down_limit=R,up_limit=W-R;

output[i].horizon=left_right(x,vx,s,left_limit,right_limit);

output[i].vertical=up_down(y,vy,s,down_limit,up_limit);

i++;

}

for(j=0;j

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值