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

三角形角度计算遇NaN问题求助:等腰/等边三角形计算失效

问题分析与修复方案

核心错误:余弦定理运算顺序错误

你的calcAngleC方法中,余弦定理的公式因缺少括号导致运算逻辑完全错误:

原错误代码:

angleC = Math.acos((Math.pow(sidea,2) + Math.pow(sideb,2) - Math.pow(sidec,2)) / 2 * sidea * sideb);

根据余弦定理,正确公式应为:
$$\cos C = \frac{a^2 + b^2 - c^2}{2ab}$$

但你的代码中,/ 2 * sidea * sideb会先执行除法再执行乘法,实际计算的是$\frac{a^2 + b^2 - c^2}{2} \times a \times b$,这个结果会远远超出Math.acos()的定义域[-1, 1],因此返回NaN。不等边三角形3,4,5只是巧合让错误结果落在定义域内,而等腰/等边三角形的计算结果会完全越界,导致报错。


修复步骤

1. 修正余弦定理公式

给分母部分添加括号,确保先计算2 * sidea * sideb:

public void calcAngleC()        
{
    double numerator = Math.pow(sidea, 2) + Math.pow(sideb, 2) - Math.pow(sidec, 2);
    double denominator = 2 * sidea * sideb;
    angleC = Math.acos(numerator / denominator);
}

2. 统一角度存储逻辑

当前angleA存储的是度数,而angleB、angleC存储的是弧度,容易混淆。建议统一存储弧度,输出时再转换为度数:

public void calcAngleA()        
{
    // 三角形内角和为π弧度(等价于180度)
    angleA = Math.PI - angleB - angleC;
}

然后修改printStats方法,统一转换角度:

public void printStats()
{
    System.out.printf("\nSide A: %1.2f", sidea);
    System.out.printf("\nSide B: %1.2f", sideb);
    System.out.printf("\nSide C: %1.2f", sidec);
    System.out.printf("\n\nAngle A: %1.2f%1s", Math.toDegrees(angleA), (char)176);
    System.out.printf("\nAngle B: %1.2f%1s", Math.toDegrees(angleB), (char)176);
    System.out.printf("\nAngle C: %1.2f%1s", Math.toDegrees(angleC), (char)176);
}

3. 可选:添加输入合法性检查

为避免无效边长(不满足三角形三边关系)导致的计算错误,可在构造函数中添加校验:

public Triangle()       
{
    setSideA();
    setSideB();
    setSideC();
    if (!isValidTriangle()) {
        System.err.println("Error: Invalid triangle sides (sum of any two sides must be greater than the third).");
        System.exit(1);
    }
    angleA = 0;
    angleB = 0;
    angleC = 0;
}

private boolean isValidTriangle() {
    return (sidea + sideb > sidec) && (sidea + sidec > sideb) && (sideb + sidec > sidea);
}

测试验证

修复后,测试以下用例:

  • 等边三角形(5,5,5):三个角均为60°
  • 等腰三角形(5,10,10):角A≈28.96°,角B≈角C≈75.52°
  • 直角三角形(3,4,5):角C≈90°,角A≈36.87°,角B≈53.13°

所有用例均可正常计算出正确角度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:47:24