Arcsine不会更改Java中变量的值

时间:2014-04-20 23:12:53

标签: java double trigonometry

我已经查看过不同的网站,试图解决我的问题。我也尝试在Java中查找有关trig的任何YT或其他视频,但无法找到任何内容。 (我是一个菜鸟,所以我也不会总是理解大多数网站所指的一切)。

无论如何,我试图制作一个简单的程序来计算Snell法律的部分内容(我发现有网站可以做到这一点)。但是反正弦似乎并没有影响我的变量值

以下是代码:

import java.util.Scanner;

public class trig_functions_test {
    public static void main(String[] args) {
        Scanner HumanInput = new Scanner (System.in);
        double n1, n2, Oi, OR;
        System.out.println("Enter the first medium's index of refraction.");
        n1 = HumanInput.nextDouble();
        System.out.println("Enter the second medium's index of refraction.");
        n2 = HumanInput.nextDouble();
        System.out.println("Enter the angle of incidence.");
        Oi = HumanInput.nextDouble();
        System.out.println("Enter the angle of refraction.");
        OR = HumanInput.nextDouble();

        //if angle of refraction is the missing variable
        if (OR == 0) {
           Oi = Math.toRadians(Oi);
           OR = (n1*Math.sin(Oi)/n2);
           OR = Math.toRadians(OR);
           OR = Math.asin (OR);
           OR = Math.toDegrees(OR);
           System.out.println(OR);
        }
    }
}

当我调试程序时,我得到了这个:

首先,这是实施的计划:

(0表示没有折射角)

这是if语句中第二行被评估后的结果(?):

" OR"被转换为弧度," OR"变为0.011364657670640462

然后,这是有问题的部分,评估具有反正弦的部分,并且" OR"变为0.011364*90231927541*(已更改的部分显示在*' s

之间

最后,"或"再次转换为度数,并在第二行(或多或少)之后恢复到我的值"或者,"然后等于0.6511*609374816383*(同样,更改的部分在*'之间显示。

2 个答案:

答案 0 :(得分:1)

你使你的解决方案变得比它需要的复杂得多。您应该通过在Snell定律中求解折射角来一次评估您的表达式,如下所示:

Oi = Math.toRadians(Oi);
OR = Math.asin((n1/n2)*Math.sin(Oi));
OR = Math.toDegrees(OR)

System.out.println("Angle of refraction: "+OR);

答案 1 :(得分:1)

你的麻烦来自这条线:

OR = Math.toRadians(OR);       

进行此计算时,您已经以弧度为单位获得了答案:

OR = (n1*Math.sin(Oi)/n2);

当你再次将它转换为弧度 时,你正在扭曲结果。删除OR = Math.toRadians(OR);,您的程序将按预期工作。