У меня есть пространство:Как получить координаты ближайшего свободного места?
[.][.][.][.][.]
[.][.][.][.][.]
[.][.][x][.][.]
[.][.][.][.][.]
[.][.][.][.][.]
Каждый [.]
представляет собой место в 2D-пространстве. (Это нужно для 3D, но не имеет значения, на данный момент)
По [x]
Я пометил «текущее местоположение» (скажем, это [0, 0, 0])
Так что мне нужно, чтобы найти то, что позиция ближайшего «не занятого» места.
Например, если у меня была такая площадь:
[.][.][.][.][.]
[.][b][b][b][.]
[.][b][x][.][.]
[.][b][b][b][.]
[.][.][.][.][.]
([b]
для "занят")
Тогда я должен был бы получить результат (х: 0, у: 1, г: 0) (потому что это самый близкий, свободный).
Пока думал сделать что-то вроде этого:
current_location = {x: 0, y: 0, z: 0}
radius = 0
closest_record = nil
begin
radius = radius + 1
# some way to iterate over each [x, y, z] spot within that radius until
# closest_record = Record.where(x: x1, y: y1, z: z1).first returns nil (meaning it's free)
end until record.present?
# (that's Ruby syntax, but doesn't matter really)
Есть ли какая-формула, чтобы сделать это?
вот что я думал .. –
В качестве примечания, это будет проверять каждое пятно в радиусе, и оно начнется в углу. Таким образом, вы можете получить угловой результат, когда сторона может быть ближе (в зависимости от того, как вы измеряете расстояние ... каждый элемент с заданным радиусом на одинаковом расстоянии?). Более того, если вы проверите «radius = 1» и ничего не найдете, увеличивая «радиус» до «2» и используя эту структуру, проверите все в «radius = 1», которое уже было проверено. Вам придется добавить дополнительную логику, чтобы пропустить эти проверки или потенциально тратить много времени. – nhgrif
да, вот что я делаю, спасибо –