将Radians转换为Degrees以通过棱镜获得折射率

时间:2015-09-13 08:07:58

标签: c++

我刚开始学习C ++的基础知识,我想开发一个程序,用户输入最小偏差角度,程序通过等边棱镜给出折射率。

但是,我很难以正确的方式将Radians转换为Degrees,因此我总是得到错误的答案。我想在5-6小时后进行头脑风暴,但我没有得到它。

这是代码(我使用的是Turbo C):

#include<iostream.h>
#include<conio.h>
#include<math.h>
int main()
{
    int dm;
    const float pi = 3.142;
    float nu, d;
    repeat: cout<<"Enter the angle of minimum deviation in degrees: ";
    cin>>dm;
    if(dm>=0 && dm<=180)
    {
         d = (pi/180)*dm;
         nu = ((sin((60+d)/2))*2;
         cout<<"The refractive index is "<<nu<<endl;
    } else {
         cout<<"Please enter an angle between 0 to 180 deg"<<endl;
         goto repeat;
    }
    getch();
    return 0;
}

因此,为了通过棱镜计算折射率,公式为Sin((A+dm)/2) ÷ Sin(A/2),其中A是棱镜的角度(由于它是等边棱镜,它将是60度)和{{ 1}}是用户输入的偏差角度。

但是,我总是得到一些疯狂的答案。我已经将代码更改了100多次,但我仍然没有得到正确答案。

因此,为了简化,公式将变为dm,因为棱镜的角度将为60度。

我犯了什么错误?

1 个答案:

答案 0 :(得分:0)

你的数学公式是Sin((A + dm)/ 2)÷Sin(A / 2),A = 60度或π/ 3弧度。 Ok sin(A / 2)= 1/2,这部分很好。

但函数sin需要一个以弧度表示的角度。正确的值是: ((60 + dm) / 2)以度为单位或(((pi/3) + d) /2)以弧度为单位。使用60 + d你会增加度数和弧度......给出错误的结果......

你的goto用法在这里并不合理,正如评论中所说,sin函数期望并返回double而不是浮点数。所以你应该以这种方式使用全精度:

#include<iostream.h>
#include<conio.h>
#include<math.h>
int main()
{
    int dm;
    const double pi = M_PI;
    const double pi3 = pi / 3;
    double nu, d;
    for(;;) {
        cout<<"Enter the angle of minimum deviation in degrees: ";
        cin>>dm;
        if(dm>=0 && dm<=180)
        {
             d = (pi/180)*dm;
             nu = (sin((pi3+d)/2))*2; /* ok everything is radian */
             cout<<"The refractive index is "<<nu<<endl;
             break; /* exit from infinite loop */
        } else {
             cout<<"Please enter an angle between 0 to 180 deg"<<endl;
        }
    }
    getch(); /* avoid that ! It is easier when running from IDE but it is ugly 
                Better use a breakpoint on next line. */
    return 0;
}