暑假训练 台球碰撞(计算几何)

题目链接内网可进

题意:

给出你个圆让他在一个矩阵中运动,求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);
    }
posted @ 2021-07-19 20:28  `KingZhang`  阅读(105)  评论(0编辑  收藏  举报