Оптимизация функции расчета расстояния - PullRequest
8 голосов
/ 05 марта 2009

В моем коде мне нужно много вычислить расстояние между парами значений lat / long.

код выглядит так:

double result = Math.Acos(Math.Sin(lat2rad) * Math.Sin(lat1rad) 
+ Math.Cos(lat2rad) * Math.Cos(lat1rad) * Math.Cos(lon2rad - lon1rad));

(например, lat2rad - это широта, переводимая в радианы).

Я определил эту функцию как узкое место в производительности моего приложения. Есть ли способ улучшить это?

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

Спасибо за ваше время! ; -)

Ответы [ 12 ]

0 голосов
/ 05 марта 2009

Что ж, так как lat и lon гарантированно находятся в определенном диапазоне, вы можете попробовать использовать некоторую форму справочной таблицы для вызовов методов Math. *. Скажем, Dictionary<double,double>

0 голосов
/ 05 марта 2009

Насколько точными должны быть значения?

Если вы немного округлите свои значения, то сможете сохранить результат всех поисков и проверить, использовались ли они для каждого вычисления?

...