首页 > 代码库 > 弹性碰撞
弹性碰撞
只有一个球时,这就是单纯的物理问题。
多个球时,所有的球都是一样的,两个球相撞后互相交换速度,可以视为直接互相穿过继续运动。
由于在碰撞时球的顺序是不会改变的,先落下的球始终在下面。 所以将计算出的每个球的高度进行排序就能知道每个球的最终位置。
最后按照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; }
弹性碰撞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。