Рассчитать расстояние между двумя координатами х / у?

Вот сценарий bash, который я собрал вместе, который выполнит преобразование ImageMagick, заданное ypnos во всех файлах png в каталоге. Вы можете сделать его рекурсивным, заменив * в третьей строке командой find.

#!/bin/bash

for file in *
do
    if [[ $file =~ (.+)-mask\.png ]]; then
        echo "Ignoring mask $file"
    elif [[ $file =~ (.+)\.png ]]; then
        echo "Generating mask for $file"
        basefn=${BASH_REMATCH[1]}
        convert "$basefn.png" -channel Alpha -negate -separate "$basefn-mask.png"
    fi
done
21
задан Jason Sundram 24 December 2011 в 03:17
поделиться

4 ответа

Так что вы ищете евклидово расстояние на двумерной поверхности тора, я собираю.

sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)

где W и H H - ширина (x) и высота (y) сетки соответственно.

53
ответ дан 29 November 2019 в 06:31
поделиться
  • Если / в то время как расстояние между X координатами больше половины размера GRID X, добавьте размер GRID X в меньшую координату X.
  • Сделайте то же самое для Y.
  • затем рассчитайте расстояние.
7
ответ дан 29 November 2019 в 06:31
поделиться

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

Давайте используем меньшую сетку, числа немного более управляемые. Скажи сетка 10x10. Давайте также будем использовать только одно измерение для простоты (в этом случае будет всего в двух расстояниях), так же, как у вас есть в своем примере. Скажем, у нас есть точки 0,2 и 0,6. Две расстояния между точками являются d_1 = (6-2) = 4 и d_2 = (10-6) + 2 = 6, поэтому в этом случае кратчайшее расстояние будет D_1.

В целом вы можете сделать следующее:

  • для каждой координаты:
    • Вычитайте меньшее из большего числа
    • , если результат превышает половину ширины сетки, кратчайшее расстояние в этой координате - ширина сетки минус результат
    • , если результат меньше половины ширины Сетки, кратчайшее расстояние в этой координате является результатом

, затем используя теорему Пифагораса, кратчайшее расстояние между двумя точками является квадратный корень из суммы квадратов кратчайших расстояний в каждом направлении. Вы можете рассчитать другие три расстояния путем расчета теоремы Пифагорас, используя другие комбинации расстояний в каждом направлении.

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

4
ответ дан 29 November 2019 в 06:31
поделиться

Для точек (x1, y1) и (x2, y2) необходимо рассчитать 4 расстояния:

  • из (x1, y1) до (x2, y2)
  • из (x1, y1) для ( x2, 500-y2)
  • из (x1, y1) до (500-x2, y2)
  • из (x1, y1) до (500-x2, 500-y2)

, а затем взять минимальный из тех.

1
ответ дан 29 November 2019 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: