You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算矩形内相交双圆构成的8字形外围长度?实现inkAmount方法

问题分析与解法

核心思路

计算8字形外围的墨水量(即外围总长度),可按题目提示的思路:两个圆的总周长减去2倍的重叠弧长(重叠部分被两个圆各计算了一次,需从总周长中扣除两次)。

推导过程

  1. 确定圆的半径:每个圆与矩形三条边相切,因此圆的半径 r = a/2(矩形高度的一半)。
  2. 计算圆心距:两个圆分别靠近矩形左右两端,圆心的水平距离为 d = a - b(因 a ≥ b,直接取正值)。
  3. 计算重叠弧对应的圆心角:通过余弦定理推导,单个圆中重叠弧对应的圆心角(弧度制)为 2 * arccos(d/(2r)),代入 r 和 d 后简化为 2 * arccos( (a - b)/a )。
  4. 推导最终公式:
    • 两个圆的总周长为 2 * 2πr = 2πa(代入 r=a/2)。
    • 两个圆的重叠弧长总和为 2 * r * 2 * arccos( (a - b)/a ) = 2a * arccos( (a - b)/a )。
    • 外围总长度 = 总周长 - 重叠弧长总和,最终简化为:
      inkAmount = 2 * π * a - 2 * a * arccos( (a - b) / a )
      

代码实现(Java)

public class Pepe8Shape {
    public double inkAmount(int b, int a) {
        double theta = Math.acos( (a - b) / (double)a );
        return 2 * Math.PI * a - 2 * a * theta;
    }
}

示例验证

当 b=2、a=3 时:

  • theta = arccos( (3-2)/3 ) ≈ 1.23096 弧度
  • 计算结果:2*π*3 - 2*3*1.23096 ≈ 18.84956 - 7.38576 ≈ 10.10963,与题目给出的示例结果完全一致。

内容的提问来源于stack exchange,提问作者Fabian Nogales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:41:59