NOIP2005复赛 普及组 第2题 校门外的树(枚举)
1. 题目翻译
题目描述
小学生小智在校门外玩耍,看到了一棵高高的树。他想估算一下树的高度,请你帮忙。
小智告诉你他站在树的正下方,抬头看到树顶的角度为 $\alpha$ 度,他走了 $d$ 米之后发现角度变为 $\beta$ 度,用这些数据帮他算出树的高度是多少。(不考虑小智眼睛高度与树底水平面的高差)
输入格式
输入包含三个整数 $d, \alpha, \beta$,其中 $1 \leq d, \alpha, \beta \leq 90$。
输出格式
输出一个实数,保留两位小数,表示树的高度。
提示
本题涉及三角函数运算,需要使用 $\rm C++$ 中的数学库函数
输入样例
10 25 30
输出样例
12.59
2. 思路分析
这道题其实是一道计算几何的题目,要求我们通过已知的角度和距离来求解高度。
首先,我们可以将问题抽象成一个平行四边形,如下图所示:
假设我们取一个点 $X$ 作为树的顶端,那么不难发现我们可以将平行四边形划分成两个三角形,其中一个是以 $X$ 为顶点,以 $Y_1, P$ 为底边的三角形,另一个是以 $X$ 为顶点,以 $Y_2, Q$ 为底边的三角形。因此,我们需要通过求解这两个三角形,来得到树的高度。
因为我们已知了距离 $d$ 和两个角度 $\alpha$ 和 $\beta$,因此我们可以计算出各个三角函数的值。具体来讲,我们可以用下面的公式求出 $XQ$ 和 $YP$ 的长度:
$$ XQ = d \cdot \tan\beta $$
$$ YP = d \cdot \tan\alpha $$
然后,我们可以通过下面的公式,来计算出树的高度 $h$:
$$h = XQ \cdot \tan\beta + YP \cdot \tan\alpha $$
这道题的代码不难实现,不过需要注意的是,我们需要将角度转化成弧度,通过 math 库中的 tan 来计算三角函数的值。
3. 参考代码
下面是能够通过本题的参考代码:
