弹性碰撞

Posted 穿越银河系

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹性碰撞相关的知识,希望对你有一定的参考价值。

 

只有一个球时,这就是单纯的物理问题。

多个球时,所有的球都是一样的,两个球相撞后互相交换速度,可以视为直接互相穿过继续运动。

由于在碰撞时球的顺序是不会改变的,先落下的球始终在下面。 所以将计算出的每个球的高度进行排序就能知道每个球的最终位置。

最后按照R=0的结果加上2R*i就是每个球的高度。

#include<iostream>
#include<math.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int N,H,R,T;
const double g=10.0;
double y[105];
double calc(int T)
{
    if(T<=0) return H;
    double t=sqrt(2*H/g);
    int k=(int)(T/t);
    if(k%2==0)
    {
        double d=T-k*t;
        return H-g*d*d/2;
    }
    else
    {
        double d=k*t+t-T;
        return H-g*d*d/2;
    }
}
int main()
{
    int round;
    cin>>round;
    while(round--)
    {
        cin>>N>>H>>R>>T;
        for(int i=0; i<N; i++)
        {
            y[i]=calc(T-i);
        }
        sort(y,y+N);
        for(int i=0; i<N; i++)
        {
            printf("%.2f%c",y[i]+2*R*i/100.0,i+1==N?\'\\n\':\' \');
        }
    }
    return 0;
}
poj3684

 

以上是关于弹性碰撞的主要内容,如果未能解决你的问题,请参考以下文章

js实现小球的弹性碰撞。

Greedy:Physics Experiment(弹性碰撞模型)(POJ 3848)

弹性碰撞 poj 3684

弹性碰撞

完美世界笔试题---小球弹性碰撞

POJ 2674-Linear world(弹性碰撞)