0

这是代码:

double r = Double.parseDouble(radius.getText().toString());
                double del = Double.parseDouble(delta.getText().toString());


                double dm = ((int)((del - ((int)del)) * 100));

                double rads = (((int)del) + (dm / 60) + (((((del - ((int)del)) * 100) - ((int)((del - ((int)del)) * 100))) * 100) / 3600)) * (Math.PI / 180);

                String t = String.valueOf(r * (Math.tan(rads / 2)));
                String c = String.valueOf(2* r* (Math.sin((rads/2))));
                String m = String.valueOf(r*(1- Math.cos((rads/2))));
                String a = String.valueOf(2*Math.PI*r*((((int)del) + (dm / 60) + (((((del - ((int)del)) * 100) - ((int)((del - ((int)del)) * 100))) * 100) / 3600))/360));

                tangent.setText(t);
                arc.setText(a);
                chord.setText(c);
                mid.setText(m);

我的目标是减少我在程序中使用的变量的数量来清理它。因为它是我发布的方式,所以公式有效。如果我将双“rads”中的“dm”替换为“((int)((del - ((int)del)) * 100))”的当前值,则公式不再有效。它与“/60”有关。我尝试了不同的支架情况,但似乎不起作用。我已经替换了公式其他部分的“dm”,它仍然有效,它只是在那个位置。有任何想法吗?

4

2 回答 2

2

您的代码很难阅读。这就是你挣扎的部分原因。

我会这样写:

package misc;

/**
 * Created by Michael on 12/12/2015.
 * @link https://stackoverflow.com/questions/34236175/degrees-minutes-seconds-to-radians-formula-not-working
 */
public class AngleConverter {

    public static void main(String[] args) {
        double degrees = (args.length > 0) ? Double.valueOf(args[0]) : 0.0;
        double minutes = (args.length > 1) ? Double.valueOf(args[1]) : 0.0;
        double seconds = (args.length > 2) ? Double.valueOf(args[2]) : 0.0;
        double radians = convertDegreesToRadians(degrees, minutes, seconds);
        System.out.println(String.format("degrees: %10.6f", degrees));
        System.out.println(String.format("minutes: %10.6f", minutes));
        System.out.println(String.format("seconds: %10.6f", seconds));
        System.out.println(String.format("radians: %10.6f", radians));
        System.out.println(String.format("degrees: %10.6f", Math.toDegrees(radians)));

    }

    public static double convertDegreesToRadians(double degrees, double minutes, double seconds) {
        double angle = degrees + minutes/60.0 + seconds/3600.0;
        return Math.toRadians(angle);
    }
}
于 2015-12-12T12:33:19.167 回答
0

假设您有d m s度数、分钟数和秒数。鉴于

60 minutes = 1 degree
60 seconds = 1 minute

我们得到表示的总度数d m s

deg = d + m/60 + s/60^2

现在是将deg度数转换为弧度的问题。但

360 degrees = 2*Pi radians

所以,

1 degrees = (2*Pi/360) radians

deg degrees = deg * (2*Pi/360) radians

总结一下,答案是

(d + m/60 + s/60^2) * 2 * Pi / 360

可以改写为

((s/60 + m)/60 + d)/60 * Pi/3
于 2015-12-12T17:13:00.147 回答