C++ 斯奈尔&x27;s定律&x2014;如何处理asin()中的无效值?

C++ 斯奈尔&x27;s定律&x2014;如何处理asin()中的无效值?,c++,physics,C++,Physics,说明入射角与折射角正弦之比等于给定材料折射率之比的倒数: 我想实施一个简单的程序,使法律形象化。因为,大家都知道,我是这样计算的: theta2 = asin((sin(theta1) * n1) / n2); 问题在于,对于和的某些值(例如玻璃和空气分别为1.52和1.0),(sin(theta1)*n1)/n2的结果在较大角度下可能大于1.0,这使得asin返回NaN。我处理这个问题的方法是检查(sin(theta1)*n1)/n2是否大于1.0,如果是这种情况,首先从中减去1,用新值计

说明入射角与折射角正弦之比等于给定材料折射率之比的倒数:

我想实施一个简单的程序,使法律形象化。因为,大家都知道,我是这样计算的:

theta2 = asin((sin(theta1) * n1) / n2);
问题在于,对于和的某些值(例如玻璃和空气分别为1.52和1.0),
(sin(theta1)*n1)/n2
的结果在较大角度下可能大于1.0,这使得
asin
返回NaN。我处理这个问题的方法是检查
(sin(theta1)*n1)/n2是否大于1.0,如果是这种情况,首先从中减去1,用新值计算,然后将
0.5*M_PI
(或90.0度)加到它上面。有更好的方法吗?

与您链接的方法相同:

当光从折射率较高的介质传播到折射率较低的介质时,在某些情况下(当入射角足够大时),斯内尔定律似乎要求折射角的正弦大于1这当然是不可能的,在这种情况下,光线完全被边界反射,这种现象称为。

所以,你做错了。如果要避免处理NAN,检查该值是否大于1是一件好事;但如果真的发生了,千万不要用数学技巧来规避它!它有一个精确的物理意义,必须保持这个意义

与您链接的相同:

当光从折射率较高的介质传播到折射率较低的介质时,在某些情况下(当入射角足够大时),斯内尔定律似乎要求折射角的正弦大于1这当然是不可能的,在这种情况下,光线完全被边界反射,这种现象称为。


所以,你做错了。如果要避免处理NAN,检查该值是否大于1是一件好事;但如果真的发生了,千万不要用数学技巧来规避它!它有一个精确的物理意义,必须保持这个意义

为什么要为
theta2
的NaN值添加hack-on?这不符合全内反射吗?这是没有折射光线的情况。为什么要为
theta2
的NaN值添加hack-on?这不符合全内反射吗?这是没有折射光线的情况。此外,您可以使用来计算反射波和透射(折射)波的强度。此外,您可以使用来计算反射波和透射(折射)波的强度。