-3

这是两个类的代码,用户必须输入两个角度的值和三角形一部分的长度。我了解 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;

    }

    }
4

6 回答 6

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)));

将打印(演示

Tan: 0.5773502691896257
ATan: 29.999999999999996
于 2014-07-15T19:42:10.763 回答
1

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

您转换为弧度是错误的。

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

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

于 2014-07-15T19:34:55.843 回答
1

的参数Math.tan()必须以弧度表示。

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

于 2014-07-15T19:31:23.940 回答
0

您使用弧度到度数对话 (180/Math.Pi)。但是,您需要弧度对话的程度,即;

弧度

然后,最好实现一个效用函数,如

public int degreeToRadian(int degree)
{
   return degree * (Math.pi / 180);
}

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

Math.tan(degreeToRadian(angle));

您也可以使用Math#toRadians来代替上面的。

来自文档;

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

参数: a - 角度,以弧度为单位。返回: 参数的正切。

也可以看看

弧度

于 2014-07-15T19:34:24.820 回答
0

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

于 2014-07-15T19:36:51.147 回答
0

30 度角应生成如下所示的代码:

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

其他任何事情都是错误的。

于 2014-07-15T19:31:29.577 回答