我已经查看过不同的网站,试图解决我的问题。我也尝试在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*
(同样,更改的部分在*
'之间显示。
答案 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);
,您的程序将按预期工作。