2

“我在eclipse中使用J2ME,需要使用acos()属于Math包的方法,问题是J2ME Math可用的包不是那个功能(手机限制),那么我想要一个算法或方法替代计算余弦。

我需要“acos”来计算以下公式:

long2 = cood[i].getLongitud();
lat2 = cood[i].getLatitud();
dlong = (long1 - long2); 
c = dlong * degtorad;
dvalue = (Math.sin(a) * Math.sin(b))+(Math.cos(a) * Math.cos(b)*Math.cos(c)); 

dd = Math.acos(dvalue) * radtodeg; 

km = (dd * 111.302);

此功能允许我从两个地理坐标计算它们之间的距离(以公里为单位)。如果有另一种方法来计算这个距离(不使用余弦),我也会很有用。

对此有什么帮助吗?

4

3 回答 3

1

您可以尝试实现反余弦,如此处所示

于 2011-09-07T19:35:26.873 回答
1
public static double acos(double a)
{
    final double epsilon=1.0E-7; 
    double x=a;
    do {
        x-=(Math.sin(x)-a)/Math.cos(x);
    }
    while (Math.abs(Math.sin(x)-a)>epsilon);

    // returned angle is in radians
    return -1*(x-Math.PI/2);
}
于 2011-09-07T21:40:22.760 回答
0

如果您有可用的 Location API,则可以使用 Coordinates 类中的 distance 方法。从坐标 API:

public float distance(Coordinates to)

根据WGS84的椭球模型计算两点之间的大地距离。计算中忽略了高度。实现应尽可能准确地计算它。但是,要求结果在正确结果的 0.35% 以内。

于 2011-09-20T08:54:47.700 回答