暑假训练 台球碰撞(计算几何)
题意:
给出你个圆让他在一个矩阵中运动,求s秒后圆心最后位置:
给出你矩阵大小\(l,w\)给你圆心坐标\(x,y\)给出你圆半径\(r\),给出你运动速度,夹角,和运动时间\(v,a,s\)
思路:
我们通过把运动分解,分解成x轴方向和y轴方向的运动.
首先我们想到圆有半径,那么半径碰到边框即会碰撞,所以我们可以直接看圆心的运动.并且我们上面说了分解,所以我们也把速度分解了.
当距离大于我们后来圆心的边框,我们就可以模拟成两个边框叠加,进入另一个边框,然后对称过来即可.
while(cin>>l>>w>>x>>y>>r>>a>>v>>s){
if(l==0&&w==0) return 0;
l-=r;w-=r;
a=a*1.0/180*acos(-1.0);
double fx,fy;
fx=v*cos(a)*s+x;
fy=v*sin(a)*s+y;
while(fx<r||fx>l){
if(fx<r) fx = r*2-fx;
if(fx>l) fx = l*2-fx;
}
while(fy<r||fy>w){
if(fy<r) fy =r*2-fy;
if(fy>w) fy =w*2-fy;
}
printf("%.2lf %.2lf\n",fx,fy);
}