弹性碰撞
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; }
以上是关于弹性碰撞的主要内容,如果未能解决你的问题,请参考以下文章