关于数学:Java:计算扁球体的SA

Java: Calculate SA of oblate spheroid

Write a program Spheroid.java that takes respectively parameters a and c
as command-line arguments and calculates surface area of an oblate spheroid.

他给了我们要使用的公式,但是当我用他的示例命令行参数运行它时,我得到了完全不同的东西。他的例子给出6和5,得到403.050。我做了我认为正确的事,得到了546.1380388013903。我还没有试着绕过它,我只是想看看我是否接近它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Spheroid {

    public static void main(String[] args){
        String a = args[0];
        String c = args[1];
        Double A = Double.parseDouble(a);
        Double C = Double.parseDouble(c);
        Double e;
        Double S;
        e = Math.sqrt(1-(Math.pow(C, 2)/Math.pow(A, 2)));
        S = (2 * Math.PI * Math.pow(A, 2)) + (Math.PI * ((Math.pow(C, 2)/ Math.pow(e, 2))) * (Math.log((1+e)/(1-e))));

        System.out.println(S);
    }
}


公式在Java中没有正确表达。以下是对代码的一些更改:

1
2
3
4
5
6
7
8
9
public static void main(String[] args){
    String a = args[0]; //"6";
    String c = args[1];; //"5";
    double A = Double.parseDouble(a);
    double C = Double.parseDouble(c);
    double e = Math.sqrt(1-(Math.pow(C, 2)/Math.pow(A, 2)));
    double S = (2 * Math.PI * Math.pow(A, 2)) + (Math.PI * ((Math.pow(C, 2)/ e)) * (Math.log((1+e)/(1-e))));
    System.out.println(S);
}

输出为:403.0500218861285

要将其四舍五入为3dp,可以使用十进制格式:

1
2
3
DecimalFormat newFormat = new DecimalFormat("#.###");
double threeDecimalPlaces =  Double.valueOf(newFormat.format(S));
System.out.println(threeDecimalPlaces);


在代码中,您使用math.pow(e,2))计算sa。然而,在实际公式中,它只是"e",而不是e的幂2。


最后一行应该是

1
S = (2 * Math.PI * Math.pow(A, 2)) + (Math.PI * ((Math.pow(C, 2)/ e)) * (Math.log((1+e)/(1-e))));

你用的是c^2/e^2,而不是c^2/e