Java中的正弦定律

时间:2016-10-05 19:34:05

标签: java

所以我正在为高中的AP comp sci课程编写一个程序,我们被告知要找到一个三角形的角度测量,只给出边长,我使用了cosigns定律来找到第一个角度,我试图使用正弦定律找到第二个,但它不起作用。我已经阅读了所有其他线程,并添加了Math.toRadians()行来帮助修复它,但它仍然无法正常工作。这是我的代码(请原谅它仍然是一项正在进行的工作):

    double s1 = 0;
    double s2 = 0;
    double s3 = 0;
    double angles1 = 0;
    double angles2 = 0;
    System.out.println("Enter side 1 of your triangle");
     s1 = key.nextDouble();
    System.out.println("Enter side 2 of your triangle");
     s2 = key.nextDouble();
    System.out.println("Enter side 3 of your triangle");
     s3 = key.nextDouble();       

    angles1 = Math.acos((s3*s3-s2*s2-s1*s1)/(2*s1*s2)); // angle from side 3

    angles2 = Math.asin(Math.sin(Math.toRadians(angles1)) * s2 / s3);


    angles1 = angles1 * 57.3;
    angles1 = Math.round(angles1);


    angles2 = angles2 * 57.3;
    angles2 = Math.round(angles2);





    System.out.println(" Angle 1 " + angles1);
    System.out.println(" Angle 2 " + angles2);

2 个答案:

答案 0 :(得分:0)

Math.acos以弧度为单位返回一个值,所以只需删除Math.toRadians即可正常工作:

angles2 = Math.asin(Math.sin(angles1) * s2 / s3);

答案 1 :(得分:0)

Math.acos返回值的反余弦值;返回的角度在弧度范围内的0.0到pi范围内,然后替换

 angles2 = Math.asin(Math.sin(Math.toRadians(angles1)) * s2 / s3);

通过

 angles2 = Math.asin(Math.sin(angles1) * s2 / s3);

...

angles1 = Math.acos((s3*s3-s2*s2-s1*s1)/(2*s1*s2)); // angle from side 3

这是错误的替换

angles1 = Math.acos((s3*s3+s2*s2-s1*s1)/(2*s1*s2)); // angle from side 3

angles2 = Math.asin(Math.sin(Math.toRadians(angles1)) * s2 / s3);

通过

angles2 = Math.asin(Math.sin(Math.toRadians(angles1)) * s2 / s1);