Рассчитать расстояние сетки между шестиугольниками

введите описание изображения здесь

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

Я читал о некоторых способах, но все они говорят, что ось Y должна быть 60 градусов, а затем они предлагают некоторые формулы ( Манхэттенское расстояние между плитками в гексагональной сетке). Есть ли способ рассчитать расстояния, используя "Систему координат" так же, как на картинке, которую я загрузил?

1 ответ

Решение

Евклидово расстояние

Вы можете вычислить евклидово расстояние, используя нормальную формулу, примененную к вычисленным местоположениям.

Предположим, мы начинаем с местоположений a0,b0 и a1,b1.

Положение х определяется как b*w, где w - это константа, которая зависит от размера шестиугольников.

Положение y определяется как (a+b/2)*h. Итак, полная формула:

x0 = b0*w
x1 = b1*w
y0 = (a0+b0/2)*h
y1 = (a1+b1/2)*h 
dist = sqrt( (x1-x0)^2 + (y1-y0)^2 )

h - высота шестиугольника

w горизонтальное расстояние между столбцами шестиугольников

w также может быть вычислено как функция от h как:

w=sqrt(3)*h/2

Расстояние шестиугольника

Предположим, вы можете перейти от шестиугольника к соседнему шестиугольнику.

Вы можете рассчитать количество ходов от одного шестиугольника к другому:

x0 = a0-floor(b0/2)
y0 = b0
x1 = a1-floor(b1/2)
y1 = b1
dx = x1 - x0
dy = y1 - y0
dist = max(abs(dx), abs(dy), abs(dx+dy))
Другие вопросы по тегам