题目描述
有一长方形,长为343720单位长度,宽为233333单位长度。在其内部左上
角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分解
到长宽两个向上的速率之比为dx : dy = 15 : 17。小球碰到长方形的边框
时会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持
速率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到
其第一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案
四舍五入保留两位小数。
模拟
小球在长宽固定的区域内弹射,每当小球横向移动15n,其纵向必定移动17n
小球横向移动一个来回就是2倍长度,纵向移动距离是横向移动距离的17/15倍
小球横向每移动一个来回,x坐标都会移动到起点,
纵向若此时也移动了宽度的若干个来回,说明小球到达起点
C++ 代码
#include <bits/stdc++.h>
using namespace std;
// 判断浮点数是否为整数
bool isInt(double num)
{
return fabs(num - (int)num) < 1e-6;
}
int main()
{
int l = 343720, w = 233333, dx = 15, dy = 17, i = 1;
double dl, dw, result;
// 小球直接横向移动两倍长度的距离,纵向也移动对应的距离
dl = l * 2, dw = dl / 15 * 17;
while (true)
{
// 小球移动的距离是否是2倍宽度的倍数(一来一回就是2倍)
if (isInt(dw * i / w / 2))
{
break;
}
// 横向移动i个来回
i++;
}
// 勾股定理 X/x*r = R
result = dl / dx * sqrt(dx * dx + dy * dy) * i;
printf("%.2lf", result);
return 0;
}