返回题解分享
讨论 / 题解分享/ 帖子详情

容器(结果填空) - 题解

问题分析



本题的核心是计算一个矩形容器在装有特定体积的液体时,能倾斜的
最大角度,同时确保液体不会溢出。为了实现这一目标,我们需要理解几何特性,并基于三角函数进行计算。

####
基本条件

  • 容器的底面是一个边长为 $25~\mathrm{cm}$ 的正方形,即底面积:

$$
S_{\text{base}} = 25 \times 25 = 625~\mathrm{cm}^2
$$
  • 容器的高度是 $33~\mathrm{cm}$,因此总容积:

$$
V_{\text{total}} = 625 \times 33 = 20625~\mathrm{cm}^3
$$
  • 液体体积:$V = 2025~\mathrm{cm}^3$。

dash 将容器
沿着底面的一条边缓慢倾斜,我们的目标是计算最大倾斜角,即使得液体刚好到达容器边界但不溢出的最大角度。

解法思路



当容器倾斜时,液体表面可能形成
两种不同的几何形状

  1. 三角形情况:如果液体体积较小,表面呈三角形。
  2. 梯形情况:如果液体体积较大,表面呈梯形。

判断依据:
假设不倾斜时液体的
高度为:

$$
h = \frac{V}{S_{\text{base}}} = \frac{2025}{625} = 3.24~\mathrm{cm}
$$

  • 如果液体高度小于容器高度的一半,那么倾斜后,液体表面是一个直角三角形
  • 如果液体高度超过一半,那么倾斜后,液体表面是一个梯形

数学推导



####
1. 三角形情况

当液体表面是三角形时,倾斜角度 $\theta$ 满足:

$$
\tan \theta = \frac{\text{底边}}{\text{高}}
$$

其中:

  • 底边:$b = \frac{2V}{S_{\text{base}}}$
  • :$H$(容器的高度)

因此:

$$
\theta = 90^\circ - \tan^{-1} \left( \frac{b}{H} \right)
$$

####
2. 梯形情况

如果液体高度更大,它会形成梯形。倾斜时,我们可以用
另一种计算方法
*:

$$
\theta = 90^\circ - \tan^{-1} \left( \frac{\text{容器宽度}}{\text{新液面高度}} \right)
$$

其中新液面高度可以从几何关系推导出来。

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    const double PI = acos(-1);
    double a, b, x;
    cin >> a >> b >> x;

    x /= a; // 计算液体的面积
    double st = x * 2 / a - b; // 计算梯形的上底

    if (st > 0) { // 液体形成梯形
        cout << fixed << setprecision(3) << 90.0 - atan(a / (b - st)) * 180.0 / PI;
    } else { // 液体形成三角形
        a = 2 * x / b;
        cout << fixed << setprecision(3) << 90.0 - atan(a / b) * 180.0 / PI;
    }

    return 0;
}


import java.util.Scanner;

public class TiltAngle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double a = scanner.nextDouble();
        double b = scanner.nextDouble();
        double x = scanner.nextDouble();
        scanner.close();

        final double PI = Math.acos(-1);
        x /= a;  // 计算液体面积
        double st = x * 2 / a - b; // 计算梯形上底

        double angle;
        if (st > 0) { // 液体表面为梯形
            angle = 90.0 - Math.toDegrees(Math.atan(a / (b - st)));
        } else { // 液体表面为三角形
            a = 2 * x / b;
            angle = 90.0 - Math.toDegrees(Math.atan(a / b));
        }

        System.out.printf("%.3f\n", angle);
    }
}


import math

def max_tilt_angle(a, b, x):
    PI = math.acos(-1)
    x /= a  # 计算液体面积
    st = x * 2 / a - b  # 计算梯形的上底

    if st > 0:  # 液体形成梯形
        angle = 90.0 - math.degrees(math.atan(a / (b - st)))
    else:  # 液体形成三角形
        a = 2 * x / b
        angle = 90.0 - math.degrees(math.atan(a / b))

    return angle

# 读取输入
a, b, x = map(float, input().split())
print(f"{max_tilt_angle(a, b, x):.3f}")
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!