UVALive 6613 Collision(物理解方程)

来源:互联网 发布:淘宝数据包解压工具 编辑:程序博客网 时间:2024/05/16 07:43

思路:设走过的时间为t,那么就有在x方向上走过的路程x+t*vx,y方向上y+t*vy,然后代入圆的方程就可以解出两个根了,判断是不是有反弹也是同理的


#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;int main(){double Rm,R,r,x,y,vx,vy;    while(scanf("%lf%lf%lf%lf%lf%lf%lf",&Rm,&R,&r,&x,&y,&vx,&vy)!=EOF){double a = vx*vx+vy*vy;double b = 2*x*vx+2*y*vy;double c = x*x+y*y-(R+r)*(R+r);double delta = b*b-4*a*c;if(delta<=0 || a==0){printf("0.000\n");continue;}double t1 = (-b+sqrt(delta))/(2*a);double t2 = (-b-sqrt(delta))/(2*a);if(t2>=0){            c = x*x+y*y-(Rm+r)*(Rm+r);double delta1 = b*b-4*a*c;double ans=0.0;if(delta1<=0)                ans = t1-t2;else{    double t3 = (-b-sqrt(delta1))/(2*a);ans = 2*(t3-t2);}printf("%.3lf\n",ans);}else{printf("0.000\n");continue;}}}


0 0
原创粉丝点击