2012-05-01 5 views
1

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

Это в Python кстати. В настоящее время поиск эвклидовой дистанции с numpy.linalg.norm, хотя есть подпрограммы piist SciPy, которые делают то же самое, что я могу использовать, я думаю.

+0

Сколько измерений? Каким образом выход «странный»? –

+3

Кроме того, вы должны привыкнуть отмечать ответы как «принятые», когда они отвечают на ваш вопрос удовлетворительно; нажмите значок галочки слева от ответа, чтобы принять его. –

+1

«Я пробовал ... но я думаю, из-за того, как я структурировал программу, это дает странный результат». Покажите, как вы пытались; показать ожидаемый и фактический результат. –

ответ

3

Вы должны отдельно проверять размер каждого измерения на то, что меньше между dx и range-dx.

def distance(p1, p2): 
    total = 0 
    for i, (a, b) in enumerate(zip(p1, p2)): 
     delta = abs(b - a) 
     if delta > dimension[i] - delta: 
      delta = dimension[i] - delta 
     total += delta ** 2 
    return total ** 0.5 
+0

это не удастся, если точки больше одной длины коробки друг от друга. – dbn

+1

@dbw: утверждение состоит из двух точек, находящихся внутри n-мерного блока, в котором вы хотите рассматривать пространство как n-мерный тор; они не могут быть более отдаленными, чем сторона коробки. – 6502

+0

Правда, если вы можете гарантировать, что вызывающий код всегда будет обеспечивать координаты двух точек в одном и том же поле, модуль не требуется. – dbn

Смежные вопросы