题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1328
题目:有一张台球桌水平边长a,竖直边长b,一个台球在其中心,从与水平边夹角为A的以速度v出发,经过时间s,与水平边碰撞反弹m次,与竖直边碰撞反弹n次,最后又经过出发点。已知a,b,s,n,m,要求A,v。假设没有能量损失,即反弹类似光的反射,对称。
题解:将路径在竖直边的反弹对称展开到水平方向上,则可得路劲总长度为b/sinA*n。同理可得总路径也等于,a/cosA*m。两式相等,得到tanA=(b*n)/(a*m),解得A,总路径除以时间s即为速度(没有能量损失,即为匀速运动)。其实a*m为水平方向总位移,b*n为竖直方向总位移,也可用勾股定理求总路径长度。
代码:
#include<cmath>
#include<iostream>
const double pi =acos(-1.0);
using namespace std;
int main()
{
double a,b,s,m,n;
while(cin>>a>>b>>s>>m>>n)
{
if(a==0&&b==0&&s==0&&m==0&&n==0) break;
double deg=atan(b*n/a/m);
// double v=sqrt(a*m*a*m+b*n*b*n)/s;
//double v=a*m/cos(deg)/s;
double v=b*n/sin(deg)/s;
printf("%.2lf %.2lf\n",deg*(180.0/pi),v);
}
return 0;
}