Найти точку, наиболее удаленную от n других точек
Я пытаюсь создать алгоритм для "бегства" и хотел бы сначала найти точки, которые являются "безопасными". То есть точки, где они относительно удалены от других точек.
Это 2D (не то, чтобы это имело большое значение) и происходит в пределах круга фиксированного размера.
Я предполагаю, что сумма квадратов расстояний даст хорошее начальное уравнение, в котором самый высокий балл-самый дальний.
Что касается выбора точек, я не думаю, что это было бы возможно. решите для X, Y, но приближения достаточно.
Я немного почитал и определил, что для того, чтобы покрыть площадь круга, вам понадобится 7 кругов размером с половину (с центрами, образующими шестигранник, и седьмой в центре)
Я мог бы перебрать их, все из которых находятся в пределах круга для начала. Поскольку я выбираю лучшую сферу подсчета очков, я могу продолжать делить их на 7 сфер. Разумеется, исключая любые точки, которые выходят за пределы исходной окружности.
Я мог бы затем выполните итерацию до нужной точности или желаемого уровня.
Чтобы расширить подход, предположение состоит в том, что требуется время, чтобы прибыть в место, и хотя место может быть безопасным, поездка между ними может и не быть. Как я должен включить расстояние в уравнение, чтобы прийти к хорошему решению?
Я полагаю, что я мог бы квадратировать расстояние до новой точки и умножить его на счет, и повторять оттуда. Это было бы очень выгодно местному месту, но я думаю, что это хорошо поведение. Он попытается найти безопасное место поблизости, а затем, пересчитав его, сможет найти "выходы" и продолжить пробираться в безопасное место.
Есть какие-нибудь мысли по этому поводу, или эта проблема уже была решена? Я не смог найти эту проблему специально, когда искал.
Правка:

Я ввел c# - реализацию алгоритма Fortune, а также добавил несколько точек вокруг моих точек, чтобы создать псевдокруглое ограничение, так как я не понимаю алгоритм достаточно хорош, чтобы настроить его вручную.
Теперь я понимаю, что синие линии создают путь между узлами. Я могу использовать длину этих и расстояние между окружающими точками, чтобы вычислить путь (время прохождения и опасность) и сравнить его с безопасностью (пустой круг, в который он пытается попасть), чтобы определить, что является лучшим курсом действий. Играя с тем, как они взаимодействуют, я могу устранить большую часть работы, которую мне пришлось бы сделать, просто используя вороного. Также Мой алгоритм нереста будет использовать это сейчас, чтобы определить LEC и икру в этом месте.
1 ответ:
Вы можете взять выпуклую оболочку Вашего набора местоположений - вершины выпуклой оболочки дадут вам набор "самых удаленных" точек. Затем возьмите центроидиз точек, от которых вы убегаете, а затем определите, какая вершина выпуклой оболочки наиболее удалена от центроида. Вы можете ускорить это, например, разделив игровое поле на квадранты - вам нужно только проверить вершины, которые находятся в самом дальнем квадранте (например, если центроид находится в положительном-X положительном-y квадранте, то вам нужно только проверить вершины в отрицательном-x отрицательном-y квадранте); если игровое поле неправильной формы, то это может быть не вариант.
В качестве альтернативы бегству в самую отдаленную точку, если у вас есть начальная точка, от которой вы убегаете (например, точки, от которых вы убегаете, являются врагами, а персонаж игрока в данный момент находится в точке X, которая обозначает его начальную точку), то вместо того, чтобы игрок бежал в самую отдаленную точку. вместо этого вы можете заставить игрока следовать по траектории, которая быстрее всего уводит его от центроида врагов - нарисуйте луч от центроида врагов через местоположение игрока, и этот луч даст вам направление, в котором игрок должен бежать.
Если персонаж игрока окружен, то оба этих алгоритма дадут бессмысленные результаты, но в этом случае у персонажа игрока все равно нет никаких жизнеспособных вариантов.
Comments