题意:
一质点从斜坡上方自由下落,问能在斜坡上反弹几次
思路:
先求出质点第一次接触斜坡的点的速度,然后分解得到延斜坡方向的分速度 vx 和垂直斜坡的分速度 vy
同时求出重力加速度g 延斜坡方向的分加速度gx 和垂直斜坡的分加速度gy
每两个碰撞点之间 看做一个过程,vy:先变成0,在变成vy,在两个点的大小一样,gy恒定,可以求两点间时间
然后可以求得两点间距离,ojbk
自闭了呀!!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <cmath>
using namespace std;
int main() {
int T; scanf("%d", &T);
while(T--) {
double a, b, x, y;
scanf("%lf%lf%lf%lf", &a, &b, &x, &y);
double y1 = -x*b/a, y2 = y-y1;
double d = sqrt(x*x + y1*y1);
double safa = b/sqrt(a*a+b*b);
double cafa = a/sqrt(a*a+b*b);
double g = 9.8;
double gx = g*safa;
double gy = g*cafa;
double v = sqrt(2*g*y2);
double vx = safa*v;
double vy = cafa*v;
int ans = 0;
double cnt = 0;
while(1) {
if(cnt > d-1) break;
ans++;
double t = 2*(vy/gy);
double dx = vx*t + gx*t*t/2;
vx += gx*t;
cnt += dx;
}
printf("%d\n", ans);
}
return 0;
}