java - 余弦定律

我正在尝试用Java创建一个程序,以在用户输入边长时计算任何三角形的内角。我已经看到了一些与此类似的问题,但我无法工作。

我想用这个来计算角度(度),但是它总是给我一个错误的答案,或者不是一个数字(NaN)。我尝试将所有内容放到一个方程式中,以防万一它只是舍入误差,但给出的答案却是相同的。从那以后,我将其重新设置为这种格式,以便于阅读。

public class Triangles
{
    // variables already declared and user inputs double sideOne, sideTwo, sideThree  
    threeSq=sideThree*sideThree;
    twoSq=sideTwo*sideTwo;
    oneSq=sideOne*sideOne;

    public static double getAngleOne(double oneSq, double twoSq, double threeSq, double sideOne, double sideTwo, double sideThree)
    {
        double angOne;
        angOne = (oneSq + twoSq - threeSq) / (2 * sideOne * sideTwo);
        angOne = Math.toRadians(angOne);
        angOne = Math.acos(angOne);
        angOne = Math.toDegrees(angOne);
        return angOne;
    }

    public static double getAngleTwo(double oneSq, double twoSq, double threeSq, double   sideOne, double sideTwo, double sideThree)
    {
        double angTwo;
        angTwo = (twoSq + threeSq - oneSq) / (2 * sideTwo * sideThree);
        angTwo = Math.toRadians(angTwo);
        angTwo = Math.acos(angTwo);
        angTwo = Math.toDegrees(angTwo);
        return angTwo;
    }

    public static double getAngleThree(double oneSq, double twoSq, double threeSq, double   sideOne, double sideTwo, double sideThree)
    {
        double angThree;
        angThree = (oneSq + threeSq - twoSq) / (2 * sideOne * sideThree);
        angThree = Math.toRadians(angThree);
        angThree = Math.acos(angThree);
        angThree = Math.toDegrees(angThree);
        return angThree;
    }
} 


我正在使用余弦定律,但这并没有给我正确的答案。例如,当我输入边长为3、3和3时,它的长度为71.68993312052173;当我输入5、6和7(分别位于1、2和3边)时,得到NaN。

编辑:
感谢您的建议,我将所有整数都更改为双精度,而我的数学就是问题所在(忘记了oneSq + twoSq-threeSq的方括号)

我提出了完整的修改后的代码,但仍然给出错误的答案,对于所有边都相同的三角形,所有三个三角形都应返回60,但返回89.49999365358626。

最佳答案

校正比率的计算后,仍然要做一件事:丢掉线

angOne = Math.toRadians(angOne);  


在这一点上,angOne不包含任何角度。如果边服从三角形不等式,则angOne此时应包含一个介于-1和1之间的数字,不需要转换。



等边三角形的面积比为0.5。转换为弧度,acos,转换为度的操作可以组合为

M*acos(x/M) = M*(pi/2-asin(x/M)),


乘数M = 180 / pi。由于x / M小,结果大约是

M*(pi/2-x/M)=90-x, 


最终获得的值接近89.5,如您上次试用所获得的。



当然,期望的结果是M * acos(0.5)= M *(pi / 3)= 60。