码迷,mamicode.com
首页 > 其他好文 > 详细

弹性碰撞

时间:2017-03-04 18:56:32      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:nbsp   block   弹性   ima   math.h   tor   for   open   技术分享   

技术分享

技术分享

 

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

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

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

最后按照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

 

弹性碰撞

标签:nbsp   block   弹性   ima   math.h   tor   for   open   技术分享   

原文地址:http://www.cnblogs.com/wangkaipeng/p/6501917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!