以下是两个类的代码,用户必须输入两个角度的值和三角形的一部分的长度。我理解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;
}
}
答案 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)。但是,你需要度数到弧度转换,这是;
然后,最好实现像
这样的实用程序功能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。如果参数为零,则结果为a 与参数符号相同的零。计算结果必须是 在精确结果的1 ulp内。结果必须是半单调的。
参数:a - 以弧度表示的角度。返回:的正切值 参数。
另见
答案 5 :(得分:0)
您可以使用Math.toRadians(int degree)进行转换