uva 10387 - Billiard

来源:互联网 发布:js调用ajax方法 编辑:程序博客网 时间:2024/05/17 21:40

题意:  台球从水平长度a垂直长度b的桌子中间以速度v射出   s 秒后撞击 水平挡板n次    垂直挡板m次  然后返回出发点

这道题有一个很重要的思想 :   既然速度不变 那么我们就把台球抽象在一个很多的台球桌拼接在一起的平面上的运动    为什么这样想呢  因为入射角等于反射角 

然后从一个台球桌的中点到另外一个台球桌的中点找一条满足与垂直相交m次   与水平相交n次的点   找到哪个点应该不难    自己找试试

找到哪个点了后就可以计算出角度和速度了;

下面看代码

#include<cstdio>#include<cmath>#define PI acos(-1)#define eps 1e-8using namespace std;int main(){    double a,b,s,m,n,v,angle;    while(scanf("%lf%lf%lf%lf%lf",&a,&b,&s,&m,&n))    {        if(a < eps&& b< eps&& s< eps&&m < eps&&n < eps)break;        angle  = atan((n*b)/(m*a));        double l = sqrt(m*a*m*a+n*b*n*b);        v = l / s;        printf("%.2lf %.2lf\n",angle*180/PI,v);    }    return 0;}

 


原创粉丝点击