Java正在为Math.tan()计算输出错误的值

时间:2014-07-15 19:27:44

标签: java trigonometry degrees radians

以下是两个类的代码,用户必须输入两个角度的值和三角形的一部分的长度。我理解Java使用弧度,但即使使用Math.toDegrees or * 180/Math.Pi进行简单转换,它仍会得到错误的答案。例如,当输入角度30时,100 * tan(30)度应该给出57.1,但是我得到44.92 ......代码:

/**Class to implement math methods, and math import
 * 
 */

/**
 * @author Oli
 *
 */

public class Balloon {

    //Attributes

    private int angle1;
    private int angle2;
    private double distance1;
    private int time;
    private double h2;

    //Consttructor

    public Balloon (int ang1, int ang2, double dist1, int t1){
        angle1 = ang1; angle2 = ang2; distance1 = dist1; time = t1;
}


    //Methods to calculate angles, distances and time


    public double height1(){
        double h1;


        h1 = distance1 * (Math.tan(angle1*180/Math.PI));
        return h1;
    }

    public double   height2(){
        double h2;

        h2 = distance1 * (Math.tan(angle2))-(Math.tan(angle1));
        return h2;
    }

    public double speed(){
        double sp1;

        sp1 = h2/time;
        return sp1;
    }

    public double BalloonDistance(){
        double BD1;

        BD1 = distance1 / (Math.cos(angle2));
        return BD1;

    }

    }

6 个答案:

答案 0 :(得分:2)

保持一致并为会员使用弧度。

无论如何,您应该使用内置函数进行转换:

double deg = 30;
double tan = Math.tan(Math.toRadians(deg));
System.out.println("Tan: " + tan);
System.out.println("ATan: " + Math.toDegrees(Math.atan(tan)));

将打印(demo

Tan: 0.5773502691896257
ATan: 29.999999999999996

答案 1 :(得分:1)

Math.tan()的论点必须是弧度。

除非有令人信服的理由不这样做,否则我会在每个角落使用弧度,它们更容易使用。很容易让转换错误或完全错过,就像您的代码所示。

答案 2 :(得分:1)

  

我理解Java使用弧度,但即使使用Math.toDegrees或* 180 / Math.Pi进行简单转换,它仍会得到错误的答案。

你转换为弧度是错误的。

  • 执行angle/180*pi angle*180/pi
  • 或使用toRadians toDegrees

另请注意,对于某些tan计算,您根本不进行转换......

答案 3 :(得分:0)

30度角应该会产生如下代码:

double tangent = Math.tan(Math.PI/6.0);

还有别的错误。

答案 4 :(得分:0)

你使用弧度来进行对话(180 / Math.Pi)。但是,你需要度数到弧度转换,这是;

Radian

然后,最好实现像

这样的实用程序功能
public int degreeToRadian(int degree)
{
   return degree * (Math.pi / 180);
}

您应该使用Math#tan这样的度数值

Math.tan(degreeToRadian(angle));

您也可以使用Math#toRadians代替上述内容。

From Doc;

  

public static double tan(double a)返回三角正切   一个角度。特殊情况:如果参数是NaN或无穷大,   然后结果是NaN。如果参数为零,则结果为a   与参数符号相同的零。计算结果必须是   在精确结果的1 ulp内。结果必须是半单调的。

     

参数:a - 以弧度表示的角度。返回:的正切值   参数。

另见

Radian

答案 5 :(得分:0)

您可以使用Math.toRadians(int degree)进行转换