Проблемы с использованием функции acos в J2ME в Eclipse - PullRequest
2 голосов
/ 07 сентября 2011

"Я работаю с J2ME в Eclipse, и мне нужно использовать метод 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);

Эта функция позволяет мне по двум географическим координатам вычислять расстояние в километрах между ними. Если есть альтернативный метод для вычисления этого расстояния (где косинус не используется), я также был бы полезен.

Любая помощь в этом?

Ответы [ 3 ]

1 голос
/ 08 сентября 2011
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);
}
1 голос
/ 07 сентября 2011

Вы можете попробовать реализовать арккозин, как показано здесь .

0 голосов
/ 20 сентября 2011

Если у вас есть доступный Location API, вы можете использовать метод расстояния из класса Coordinates. Из API координат:

public float distance(Coordinates to)

Рассчитывает геодезическое расстояние между двумя точками по эллипсоидальной модели WGS84. Высота не учитывается при расчетах. Реализация должна рассчитать это как можно точнее. Однако требуется, чтобы результат находился в пределах 0,35% от правильного результата.

...